2010-08-06 40 views
0

讓我們假設我有一類這樣的:更改類簽名,工藝老XML序列化實例

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

我存儲這個對象的實例到ASP.NET配置文件。它的XML序列化,一切都很好。現在我想降低配置文件的大小,和我想的東西更短,以取代 propertynames:

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

的新對象得到系列化就好了,總之,一切都。但是:XmlSerializer無法反序列化舊的XML文件。有沒有我可以申請更改類簽名的鉤子,但仍然能夠反序列化舊的實例。

我有事件處理程序XmlSerializer_UnknownElement,然後我可以自己設置目標屬性的值,但是我只有元素的值作爲字符串,所以我應該自己解析它,這很容易出錯。

回答

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; } 
} 
+0

Double'XmlElements'只能提供'XmlChoiceIdentifier'。自己寫這些代碼有點不得已,我也可以用'UnknownElement'來解決它,但它會變得怪異。 – 2010-08-06 11:50:44