1

我有一些想要序列化为类的 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?(前提是员工名单中不会有重复的名字)

任何帮助深表感谢。

*序列化键值对

4

2 回答 2

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"

于 2012-05-09T06:07:46.220 回答
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无法识别要在那里处理的子元素)。

于 2012-05-09T06:03:25.583 回答