2013-10-02 123 views
1

我有一箇舊的系統,在請求信息與電話看起來像名稱返回XML:序列化/反序列化不同的屬性名稱?

postalCodeField,firstNameField ...

這同一個系統,然後有一個修改調用,它採用XML,看起來像:

POSTALCODE,fistName,姓氏....

有沒有建立一個對象,將反序列化的要求,但序列具有不同名稱的XML輸出的方法嗎?

具體做法是:

public class RequestInfo 
{ 
    public string firstNameField{get;set;} 
    public string lastNameField{get;set;} 
} 

public class ModifyInfo 
{ 
    public string firstName{get;set;} 
    public string lastName{get;set;} 
    public ModifyInfo(){} 
    public ModifyInfo(RequestInfo ri) 
    { 
     firstName = ri.firstNameField 
     ..... 
    } 
} 

是否有過發言權的方式屬性,使這些在同一個對象嗎?

編輯

有沒有辦法有一個單獨的對象,將在反序列化接受一個標籤名稱,然後輸出上連載一個不同的名字?

< myTagField />(反序列化到)myObj.MyTag(序列化到)< MyTag />

回答

4

重要的是要注意,您正在使用的實際序列化是很重要的。每個不同的序列化程序工作方式不同我想你在使用System.Xml.Serialization.XmlSerializer。如果是這樣的話,那麼你要使用的System.Xml.Serialization命名空間中的屬性,如XmlElementAttribute像這樣:

public class Person 
{ 
    [System.Xml.Serialization.XmlElement(ElementName = "firstNameField")] 
    public string FirstName { get; set; } 
} 

這是假定該字段爲一個XML元素。如果它是屬性,請使用XmlAttribute屬性。

+0

是的我正在使用該序列化程序,並且我熟悉該屬性,但是,該屬性允許我將標記反序列化爲具有不同名稱的屬性,並將該屬性序列化爲屬性列出的名稱。所以單靠這個屬性就不能解決我的問題。 – Zholen

+0

您可以在運行時僅在反序列化期間使用XmlAttributeOverrides添加該屬性。 – PashaPash

1

MSDN上檢查Attributes That Control XML Serialization。您將需要XmlElement屬性,可能還需要XmlRoot for root類。

如果你只需要反序列化期間覆蓋的屬性名,比你可以動態定義的屬性,使用XmlAttributeOverrides:

public XmlSerializer CreateOverrider() 
{ 
    XmlElementAttribute xElement = new XmlElementAttribute(); 
    xElement.ElementName = "firstName"; 

    XmlAttributes xElements = new XmlAttributes(); 
    xElements.XmlElements.Add(xElement); 

    XmlAttributeOverrides xOver = new XmlAttributeOverrides(); 
    xOver.Add(typeof(RequestInfo), "firstNameField", xElements); 

    XmlSerializer xSer = new XmlSerializer(typeof(RequestInfo), xOver); 
    return xSer; 
} 
相關問題