[英]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? (前提是,员工名单中不会有任何重复的名称)
任何帮助深表感谢。
在你的情况下,我会选择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.