簡體   English   中英

XML將成員變量序列化為xmlnode

[英]XML Serialization of member variable as xmlnode

我有一些XML,我想序列化到一個類。

<Group>
 <Employees>
     <Employee>
         <Name>Hari</Name>
         <Age>30</Age>
     </Employee>
     <Employee>
         <Name>Yougov</Name>
         <Age>31</Age>
     </Employee>
     <Employee>
         <Name>Adrian</Name>
         <Age>28</Age>
     </Employee>
</Employees >

上面的XML可以很容易地在C#中實現。 但我偶然發現了我的要求,XML的樣子,

<Group>
 <Employees>
    <Hari Age=30 />
    <Yougov Age=31 />
    <Adrian Age=28 />
 </Employees >
</Group>

Employees是List<Employee>KeyValuePair<string, int>("Hari", 30)

如何設計類和成員變量以獲取上面的序列化XML? (前提是,員工名單中不會有任何重復的名稱)

任何幫助深表感謝。

* 序列化KeyValuePair

在你的情況下,我會選擇Linq2Xml。

XDocument xDoc = XDocument.Load(......);
var emps = xDoc.Descendants("Employees").Elements()
    .Select(x => new Employee() { 
                        Name = x.Name.ToString(), 
                        Age = int.Parse(x.Attribute("Age").Value) 
                    })
    .ToList();

PS: Age=30無效。 它應該是Age="30"

將數據用作模式不是一個好主意; 特別是,許多名稱作為xml元素名稱無效 ,但也是:它只是不好的做法(例如,它使它在模式驗證方面幾乎無用)。 如果你想要簡潔,可能是這樣的:

<Employees>
    <Add Name="Hari" Age="30" />
</Employees>

要么

<Employees>
    <Employee Name="Hari" Age="30" />
</Employees>

這可以簡單地用:

[XmlArray("Employees"), XmlArrayItem("Employee")]
public List<Employee> Employees {get;set;}

和:

public class Employee {
    [XmlAttribute]
    public string Name {get;set;}
    [XmlAttribute]
    public int Age {get;set;}
}

XmlSerializer不支持“內容作為元素名稱”序列化程序,除非您使用來自父元素的 IXmlSerializable自己完成所有操作(它必須來自父元素 ,因為XmlSerializer無法識別要處理的子元素 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM