【问题标题】:Problem with deserialization xml in c# (list object) [closed]c#(列表对象)中的反序列化xml问题[关闭]
【发布时间】:2019-10-04 05:44:30
【问题描述】:
<root>
<child id="1">
<child1 id="1"/>
<child2>
<child11 id="1">
<child111 id="1"/>
</child11>
</child2>
</child>
<child id="2">
<child1 id="2"/>
</child>
</root>
我怎样才能使用反序列化得到上面的确切结构
【问题讨论】:
标签:
c#
xml
xsd
xml-serialization
xsd2code
【解决方案1】:
您可以将上面的实体大致形式化为:
using System;
using System.Xml.Serialization;
using System.Collections.Generic;
namespace WorkingProject
{
[XmlRoot(ElementName="child1")]
public class Child1 {
[XmlAttribute(AttributeName="id")]
public string Id { get; set; }
}
[XmlRoot(ElementName="child111")]
public class Child111 {
[XmlAttribute(AttributeName="id")]
public string Id { get; set; }
}
[XmlRoot(ElementName="child11")]
public class Child11 {
[XmlElement(ElementName="child111")]
public Child111 Child111 { get; set; }
[XmlAttribute(AttributeName="id")]
public string Id { get; set; }
}
[XmlRoot(ElementName="child2")]
public class Child2 {
[XmlElement(ElementName="child11")]
public Child11 Child11 { get; set; }
}
[XmlRoot(ElementName="child")]
public class Child {
[XmlElement(ElementName="child1")]
public Child1 Child1 { get; set; }
[XmlElement(ElementName="child2")]
public Child2 Child2 { get; set; }
[XmlAttribute(AttributeName="id")]
public string Id { get; set; }
}
[XmlRoot(ElementName="root")]
public class Root {
[XmlElement(ElementName="child")]
public List<Child> Child { get; set; }
}
}
然后您可以使用 XmlSerializer 类将 XML 字符串转换为 Root 类实例(您可以在必要时修改名称)。