我们假设我有一个类:
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属性的值,但是我只将元素的值作为字符串,所以我应该自己解析它,这是相当错误的易发。
答案 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; }
}