更改类签名,处理旧的xml序列化实例

时间:2010-08-06 11:12:23

标签: c# xml-serialization

我们假设我有一个类:

public class SomeObject
{
    public Guid InternalId { get; set; }
    public string Address { get; set; }
}

我将此对象的实例存储到ASP.NET配置文件中。它得到了XML序列化,一切都很好。现在我想减小配置文件的大小,我想用更短的内容替换 long 属性名:

public class SomeObject
{
    [XmlElement("id")]
    public Guid InternalId { get; set; }
    [XmlElement("ad")]
    public string Address { get; set; }
}

新对象的序列化很好,简短,一切。但是:XmlSerializer无法反序列化旧的XML文件。是否有任何钩子我可以应用来更改类签名,但仍然能够反序列化旧实例。

我有eventhandler XmlSerializer_UnknownElement,然后我可以自己设置target属性的值,但是我只将元素的值作为字符串,所以我应该自己解析它,这是相当错误的易发。

1 个答案:

答案 0 :(得分:1)

两个答案,我知道一个会起作用,另一个我不确定。

1)在您的类中实现IXmlSerializable接口。它非常容易实现,并且可以完全控制类的序列化和反序列化。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

2)不确定这是否有效,但尝试将另一个XmlElementAttribute标记添加到类属性中。它编译,但我不确定它是否会起作用。

public class SomeObject
{
    [XmlElement("InternalId")]
    [XmlElement("id")]
    public Guid InternalId { get; set; }
    [XmlElement("Address")]
    [XmlElement("ad")]
    public string Address { get; set; }
}