繁体   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