XML将成员变量序列化为xmlnode

时间:2012-05-09 05:53:09

标签: c# xml serialization

我有一些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>

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

的地方

如何设计类和成员变量以获取上面的序列化XML? (如果员工名单中没有任何重复的名称)

非常感谢任何帮助。

* Serializing KeyValuePair

2 个答案:

答案 0 :(得分:3)

在你的情况下,我会选择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"

答案 1 :(得分:1)

将数据用作架构并不是一个好主意;特别是,很多名称无效作为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无法识别要在那里处理的孩子。)