在.NET中序列化System.Drawing.Color

时间:2010-03-19 21:34:11

标签: .net serialization

我已经将默认的.NET序列化用于具有System.Drawing.Color成员的类。代码现在被人们使用,我需要在类中添加一个额外的成员,但仍然反序列化旧版本。

所以我尝试了这样做的标准方法:ISerializable接口,使用SerializationInfo方法获取int和string成员。

问题:我的类也有一个System.Drawing.Color成员,但是SerializationInfo没有提供“GetColor”方法读取此数据类型。我已经尝试将它作为一个int和一个字符串,并将其转换为System.Drawing.Color,但没有运气。

有没有人知道如何从SerializationInfo反序列化System.Drawing.Color?

2 个答案:

答案 0 :(得分:1)

使用ISerializable不是处理版本控制的推荐方法。 [OptionalField]是这个MSDN library article中详细描述的来文。

回答你的问题:SerializationInfo.GetValue(“fieldName”,typeof(Color))应该给你颜色。您需要转换返回值。

答案 1 :(得分:1)

我过去曾经使用过类似的东西。

 <Xml.Serialization.XmlIgnore()> Public BackColour As Drawing.Color

        Public Property xmlBackColour() As Integer
            Get
                Return BackColour.ToArgb
            End Get
            Set(ByVal value As Integer)
                BackColour = Drawing.Color.FromArgb(value)
            End Set
        End Property