c# - 如何将嵌套的 XML 文件反序列化为 C# 中的对象
问题描述
我遇到了一个非常复杂的 XML 结构,我认为它就像嵌套的 2D 数组。但我的定义似乎不起作用。我有一个如下所示的 Xml 结构
<Rate>
<GROUP>
<GROUPNAME>Company</GROUPNAME>
<COUNTY>Dawson</COUNTY>
</GROUP>
<EMPLOYEES>
<MEMBERS>
<MEMBER>
<SEQUENCENUM>1</SEQUENCENUM>
<GENDER>M</GENDER>
<RELATIONSHIP>Father</RELATIONSHIP>
</MEMBER>
<MEMBER>
<SEQUENCENUM>2</SEQUENCENUM>
<GENDER>F</GENDER>
<RELATIONSHIP>Mother</RELATIONSHIP>
</MEMBER>
</MEMBERS>
<MEMBERS>
<MEMBER>
<SEQUENCENUM>1</SEQUENCENUM>
<GENDER>M</GENDER>
<RELATIONSHIP>Father</RELATIONSHIP>
</MEMBER>
<MEMBER>
<SEQUENCENUM>2</SEQUENCENUM>
<GENDER>Y</GENDER>
<RELATIONSHIP>Mother</RELATIONSHIP>
</MEMBER>
</MEMBERS>
</EMPLOYEES>
我为这个结构定义了三个类
[XmlRoot("Rate")]
public class Rate
{
[XmlElement("GROUP")]
public GroupInfo Group{get; set;}
[XmlArray("EMPLOYEES")]
[XmlArrayItem("MEMBERS", typeof(Members))]
public List<Members> Employees{get; set;}
}
和这个
[XmlRoot("EMPLOYEES")]
public class Members
{
[XmlArray("MEMBERS")]
[XmlArrayItem("MEMBER", typeof(MemberInfo))]
public List<MemberInfo> Members{get; set;}
}
和这个:
[XmlRoot("Member")]
public class MemberInfo
{
public string SequenceNum{get; set;}
[XmlElement("GENDER")]
public string Gender{get; set;}
[XmlElement("RELATIONSHIP")]
public string Relationship{get; set}
}
你们对此有什么好主意吗?对于这个嵌套数组?
解决方案
添加NestingLevel = 1
到您的XmlArrayItem
属性。
此类将反序列化您的 XML。
[Serializable]
[XmlType(AnonymousType = true)]
[XmlRoot(Namespace = "", IsNullable = false)]
public class Rate
{
[XmlElement("GROUP")]
public Group Group { get; set; }
[XmlArrayItem("MEMBERS", IsNullable = false)]
[XmlArrayItem("MEMBER", IsNullable = false, NestingLevel = 1)]
public Member[][] EMPLOYEES { get; set; }
}
[XmlType(AnonymousType = true)]
public class Group
{
[XmlElement("GROUPNAME")]
public string Name { get; set; }
[XmlElement("COUNTY")]
public string Country { get; set; }
}
[XmlType(AnonymousType = true)]
public class Member
{
[XmlElement("SEQUENCENUM")]
public byte Sequencenum { get; set; }
[XmlElement("GENDER")]
public string Gender { get; set; }
[XmlElement("RELATIONSHIP")]
public string Relationship { get; set; }
}
推荐阅读
- python - 如何从pytorch更改默认优化,例如torch.optim.SGD?
- macos - 通过 ngnx 提供静态 d3.js 和 Html 文件
- android-glide - 库模块升级到 Glide 4,AppGlideModule 应该放在哪里
- django - 时态数据库的 Django 自定义创建管理器逻辑
- python - 使用 Python + pydub 在边缘检测语音与非语音
- sql-server - AWS DataPipeline 使用 SQLActivity 插入状态
- ruby-on-rails - ruby on rails vue 和 html.slim
- jmeter - 基于表单的身份验证 - Jmeter
- ansible - 如何在 Ansible set_fact 中使用事实?
- rest - 将 Tabulator 数据更改回服务器 - RESTful