我正在尝试序列化/反序列化我拥有的具有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
之前工作的属性和其他属性继续工作。有什么方法可以避免显式处理它们的序列化吗?