Ezt a problémát megoldottam úgy hogy csináltam egy osztály ami egyetlen color field-et tartalmaz.
Most a serializációval küszködök.
A Class amit el kellene menteni.using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
namespace raw_data
{
[Serializable]
public class ColorPalette : Data.ISeriazable
{
private List<Imaging.RefColor> _colorList;
public string SerializedName { get; set; }
public ColorPalette()
{
ColorList = new List<Imaging.RefColor>();
ColorList.Add(new Imaging.RefColor(Settings.ColorPalette.Default.DefaultMin));
ColorList.Add(new Imaging.RefColor(Settings.ColorPalette.Default.DefaultMax));
SerializedName = Settings.Folder.Default.ColorPalette + Path.AltDirectorySeparatorChar + System.IO.Directory.GetFiles(Settings.Folder.Default.ColorPalette).Length;
}
public List<Imaging.RefColor> ColorList { get => _colorList; set => _colorList = value; }
public Lut lut { get; set; }
public string GetSerializedName()
{
return SerializedName;
}
}
}
A serializálást végző függvény:public static void SerializeObject(Data.ISeriazable obj)
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(obj.GetSerializedName(),
FileMode.Create,
FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
}
A visszatöltés metódusainternal static void LoadSerializedPalettes(GroupBox colorPaletteGroupBox)
{
string[] serializedfilenames=Directory.GetFiles(Settings.Folder.Default.ColorPalette);
foreach (var item in serializedfilenames)
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(item,
FileMode.Open,
FileAccess.Read,
FileShare.Read);
ColorPalette cp = (ColorPalette)formatter.Deserialize(stream);
stream.Close();
ColorPaletteSettings.ColorPaletteList.Add(cp);
AddNewPalatte(colorPaletteGroupBox, cp);
}
}
Nem töltődnek rendesen vissza az objektumok. A stream még rendesen megvan. Debugban látom, hogy a hossza olyan mint amilyennek lennie kell.
Mitől lehet, hogy mégis null-t kapok?