2013-08-28 69 views
1

我需要序列化我的C#類XML看起來像這樣:格式化程序對深嵌套的XML節點序列

<request> 
    <session>12345</session> 
    <page>1</page> 
    <elements_per_page>999</elements_per_page> 
    <location> 
     <zone>aaaa</zone> 
     <region>bbbb</region> 
     <coordinates> 
      <lat>38.680632</lat> 
      <lon>-96.5001</lon> 
     </coordinates> 
    </location> 
</request> 

我不想要的是3類(請求,位置座標),我只是想要一個具有所有可變屬性的類作爲該類的根,然後添加一些可創建嵌套XML的序列化標記,是否可以這樣做?

讓我們先從裸類:

[XmlRoot] 
class request 
{ 
    [XmlElement] 
    public int session { get; set; } 
    [XmlElement] 
    public int page { get; set; } 
    [XmlElement] 
    public int elements_per_page { get; set; } 
    [?] 
    public string zone { get; set; } 
    [?] 
    public string region { get; set; } 
    [?] 
    public decimal lat { get; set; } 
    [?] 
    public decimal lon { get; set; } 
} 

如何映射他們因此XML就像我描述生成?感謝你的幫助,善良的人們:)

回答

0

「這是可能的嗎?」

不,有3個班的問題是什麼?你想如何以其他方式進行XML到靜態代碼的連接?此外,如果你只是想骯髒地吐出一些XML,你可以使用,例如,System.Xml.XmlDocument,並從頭開始構建一個xml,你可以用System.Xml.Serialization.XmlSerializer序列化。就像這樣:

public string SerializeRequest(Request request) 
{ 
     XmlDocument document = new XmlDocument(); 

     XmlElement requestElement = document.CreateElement("request"); 

     XmlElement sessionElement = document.CreateElement("session"); 
     sessionElement.InnerText = request.session.ToString(CultureInfo.InvariantCulture); 

     XmlElement pageElement = document.CreateElement("page"); 
     pageElement.InnerText = request.page.ToString(CultureInfo.InvariantCulture); 

     XmlElement elementsPerPageElement = document.CreateElement("elements_per_page"); 
     elementsPerPageElement.InnerText = request.elements_per_page.ToString(CultureInfo.InvariantCulture); 

     XmlElement zoneElement = document.CreateElement("zone"); 
     zoneElement.InnerText = request.zone; 
     XmlElement regionElement = document.CreateElement("region"); 
     regionElement.InnerText = request.region; 

     XmlElement latElement = document.CreateElement("lat"); 
     latElement.InnerText = request.lat.ToString(CultureInfo.InvariantCulture); 
     XmlElement lonElement = document.CreateElement("lon"); 
     lonElement.InnerText = request.lon.ToString(CultureInfo.InvariantCulture); 
     XmlElement coordinatesElement = document.CreateElement("coordinate"); 
     coordinatesElement.AppendChild(latElement); 
     coordinatesElement.AppendChild(lonElement); 

     XmlElement locationElement = document.CreateElement("location"); 
     locationElement.AppendChild(zoneElement); 
     locationElement.AppendChild(regionElement); 
     locationElement.AppendChild(coordinatesElement); 

     requestElement.AppendChild(sessionElement); 
     requestElement.AppendChild(pageElement); 
     requestElement.AppendChild(elementsPerPageElement); 
     requestElement.AppendChild(locationElement); 

     document.AppendChild(requestElement); 

     string serializedObj = document.OuterXml; 
     return serializedObj; 
} 
+0

1.我不想「髒吐了出來」任何XML,我需要生成XML根據提供給我一個規範(我沒有得到XSD生成的類)。 2.有3個班級有什麼意義?我希望有一些格式化程序指出這是嵌套的那樣... –