我已经将默认的.NET序列化用于具有System.Drawing.Color成员的类。代码现在被人们使用,我需要在类中添加一个额外的成员,但仍然反序列化旧版本。
所以我尝试了这样做的标准方法:ISerializable接口,使用SerializationInfo方法获取int和string成员。
问题:我的类也有一个System.Drawing.Color成员,但是SerializationInfo没有提供“GetColor”方法读取此数据类型。我已经尝试将它作为一个int和一个字符串,并将其转换为System.Drawing.Color,但没有运气。
有没有人知道如何从SerializationInfo反序列化System.Drawing.Color?
答案 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