Я пытаюсь сериализовать / десериализовать свой класс, который имеет свойство System.Windows.Media.Color
.Он не работал, потому что Color
не имеет атрибута [Serializable]
.Основываясь на некоторых других статьях, я решил реализовать ISerializable, который позволил бы мне определить собственную логику сериализации для типа Color.
Цвет теперь сериализуется должным образом, но теперь мои другие свойства (байты, числа с плавающей запятой, строки)не сериализуется.Действительно ли мне нужно определить явную логику сериализации для каждого отдельного свойства, когда я реализую ISerializable
, даже если они уже были изначально поддержаны?
#region Serialization
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
string colorString = new ColorConverter().ConvertToString(_RgbColor);
info.AddValue("System.Windows.Media.Color", colorString, typeof(string));
}
public AbstractColorModifier(SerializationInfo info, StreamingContext context)
{
string colorString = (string)info.GetValue("System.Windows.Media.Color", typeof(string));
_RgbColor = (Color)ColorConverter.ConvertFromString(colorString);
}
#endregion Serialization
#region Properties
private Color _RgbColor = Colors.Black;
public Color RgbColor {
get { return _RgbColor; }
set
{
if (_RgbColor != value) {
_RgbColor = value;
NotifyPropertyChanged("RgbColor");
}
}
}
private byte _ByteColor = 0;
public byte ByteColor {
get { return _ByteColor; }
set { ... }
}
private float _FloatColor = 0;
public float FloatColor {
get { return _FloatColor; }
set { ... }
}
#endregion Properties
Я бы ожидал, что byte
float
идругие свойства, которые работали прежде, чтобы продолжать работать ... Есть ли способ, которым я могу избежать явной обработки их сериализации?