0

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

4

2 回答 2

2

如前所述,如果您使用ISerializable.

为了解决这个问题,您现在有 2 个非常简单的解决方案:

解决方案 1 为您想要序列化的所有类型提供序列化

解决方案 2 删除IgnoreDataMemberAttributeISerializable并将其添加到您的属性。还添加一些仅序列化的属性,如下所示:Color

public string ColorSerialized
{
    get => new ColorConverter().ConvertToString(_RgbColor);
    set => _RgbColor = (Color)ColorConverter.ConvertFromString(value);
}
于 2019-05-06T12:38:54.133 回答
1

根据文档

在序列化期间调用 GetObjectData 时,您负责填充随方法调用提供的 SerializationInfo。

换句话说,您负责序列化(和反序列化)您感兴趣的所有数据(不仅仅是Color)。

于 2019-05-06T12:34:13.020 回答