使用嵌套列表将 XML 文件转换为 C# 对象
Posted
技术标签:
【中文标题】使用嵌套列表将 XML 文件转换为 C# 对象【英文标题】:Convert XML file to C# object with nested Lists 【发布时间】:2021-05-25 04:03:10 【问题描述】:我有这个 XML 文件,我正试图反序列化为 C# 对象,关闭 Tabke 标记不会显示,但除此之外:
<Table>
<ConditionSets>
<ConditionSet Name="All Coastal Exposures">
<Condition Field="State" Values="GA,FL,NC,AL"/>
<Condition Field="Client" Values="Default,ICAT,Olympus,SJIC"/>
<Condition Field="Company" Values="GM,ACME,NWGF,DSFN,DSIC"/>
<Condition Field="Product" Values="HO,FO"/>
<Condition Field="Program" Values="*"/>
<Condition Field="LineOfBusiness" Values="HO,FO,DF,IM"/>
<Condition Field="TransactionType" Values="NB,RN,CH,RR,RW,RE"/>
<Condition Field="TransactionMode" Values="Q,A"/>
<Condition Field="UserType" Values="A,E"/>
<Condition Field="Process" Values="Q,R,I"/>
<Condition Field="Environment" Values="DEV,QA,UAT,PROD"/>
<Condition Field="System" Values="BASE,SBIC,DSFM,NCIC"/>
<Condition Field="Page" Values="Applicant,Completion"/>
<Condition Field="Expression" Values="PolTransPolicy.BillingMethodCd='D'"/>
</ConditionSet>
<ConditionSet Name="Midwest Region">
<Condition Field="State" Values="IL,IO,WI,MI,MN"/>
<Condition Field="Client" Values="*"/>
<Condition Field="Company" Values="GMIC,BMIC"/>
<Condition Field="Product" Values="HO,FO,DF"/>
<Condition Field="Program" Values="*"/>
<Condition Field="LineOfBusiness" Values="HO,FO,DF,IM,PU"/>
<Condition Field="TransactionType" Values="NB,RN,CH,RR,RW,RE"/>
<Condition Field="TransactionMode" Values="Q,A"/>
<Condition Field="UserType" Values="A,E"/>
<Condition Field="Process" Values="Q,R,I"/>
<Condition Field="Environment" Values="DEV,QA"/>
<Condition Field="System" Values="BASE,GMIC,BMIC"/>
<Condition Field="Page" Values="*"/>
<Condition Field="Expression" Values="PolTransPolicy.BillingMethodCd='D'"/>
</ConditionSet>
</ConditionSets>
我似乎无法正确反序列化它,因为它是一个列表列表。如何在 C# 对象中正确设置它以进行反序列化?
这是我用来反序列化的类
[XmlRoot("Table")]
public class Table
[XmlArray("ConditionSets")]
[XmlArrayItem("ConditionSet")]
public List<ConditionSet> ConditionSets get; set;
public class ConditionSet
[XmlAttribute("Name")]
public string Name get; set;
[XmlArray("Conditions")]
[XmlArrayItem("Condition")]
public List<Condition> Conditions get; set;
public class Condition
[XmlAttribute("Field")]
public string Field get; set;
[XmlAttribute("Values")]
public string Values get; set;
【问题讨论】:
你能解释一下你到目前为止所做的尝试吗? 嗨,Austin,欢迎来到 ***。可以详细说明你的问题吗?您面临什么问题?列表中的列表在哪里?另外,分享您尝试反序列化的类。 【参考方案1】:首先,修复您的 XML。您需要像 xml 这样的***节点。那么您缺少 ConditionSets 结束节点。
完成后,您可以使用此工具将您的 XML 转换为 C# 反序列化代码:
Json2Charp
【讨论】:
【参考方案2】:您不能使用 [XmlArray("Conditions")] [XmlArrayItem("Condition")] 而是简单地使用
[XmlElement()] public List<Condition> Conditions get; set;
如果你的条件行包含在 .. 中,你的方法会奏效。
【讨论】:
这行不通,因为标签是 Condition 并且变量名是Condition。所以以下任何一个都可以工作 1) [XmlElement()] public List以上是关于使用嵌套列表将 XML 文件转换为 C# 对象的主要内容,如果未能解决你的问题,请参考以下文章
XmlSerializer C# - 对象传递的简单值被转换并显示为 xml 文件中的科学值