C# 如何解析具有相同标记名的XML
我有这个XML文件并且能够读取它,但是一旦它到达项目标记,它就会中断并返回null。注意:我只包含了给我带来问题的XML片段。C# 如何解析具有相同标记名的XML,c#,xml,C#,Xml,我有这个XML文件并且能够读取它,但是一旦它到达项目标记,它就会中断并返回null。注意:我只包含了给我带来问题的XML片段。 <ApproversList> <item> <ApprovalDate>2019-03-12</ApprovalDate> <Approved>1</Approved> <ApproverComment>ER
<ApproversList>
<item>
<ApprovalDate>2019-03-12</ApprovalDate>
<Approved>1</Approved>
<ApproverComment>ERP posting error (ERP integration timeout): Posted by Service User</ApproverComment>
<ApproverEmail />
<ApproverID>filemanager.su@100039144</ApproverID>
<ApproverLabelRole>File Manager</ApproverLabelRole>
<Approver>File Manager</Approver>
</item>
<item>
<ApprovalDate />
<Approved>0</Approved>
<ApproverComment />
<ApproverEmail />
<ApproverID>filemanagersprocess.su@100039144</ApproverID>
<ApproverLabelRole>File Manager</ApproverLabelRole>
<Approver>File Manager</Approver>
</item>
</ApproversList>
<LineItems>
<item>
<Amount>3746.29</Amount>
<Assignment />
<BusinessArea />
<CCDescription>UTILITIES DEEK WAREHOUSE</CCDescription>
<CostCenter>66999939393</CostCenter>
<Description />
<GLAccount>12345</GLAccount>
<GLDescription>Jimmy Johns</GLDescription>
<InternalOrder />
<LineType>KL</LineType>
<TaxAmount>0</TaxAmount>
<TaxCode>(SALES)</TaxCode>
<TaxJurisdiction />
<TaxRate>0</TaxRate>
</item>
</LineItems>
namespace XmlDeserializer
{
[XmlRoot(ElementName = "ApproversList")]
public class ApproversList
{
[XmlElement(ElementName = "item")]
public Item Item { get; set; }
}
[XmlRoot(ElementName = "item")]
public class Item
{
[XmlElement(ElementName = "ApprovalDate")]
public string ApprovalDate { get; set; }
[XmlElement(ElementName = "Approved")]
public string Approved { get; set; }
[XmlElement(ElementName = "ApproverComment")]
public string ApproverComment { get; set; }
[XmlElement(ElementName = "ApproverEmail")]
public string ApproverEmail { get; set; }
[XmlElement(ElementName = "ApproverID")]
public string ApproverID { get; set; }
[XmlElement(ElementName = "ApproverLabelRole")]
public string ApproverLabelRole { get; set; }
[XmlElement(ElementName = "Approver")]
public string Approver { get; set; }
[XmlElement(ElementName = "Amount")]
public string Amount { get; set; }
[XmlElement(ElementName = "Assignment")]
public string Assignment { get; set; }
[XmlElement(ElementName = "BusinessArea")]
public string BusinessArea { get; set; }
[XmlElement(ElementName = "CCDescription")]
public string CCDescription { get; set; }
[XmlElement(ElementName = "CostCenter")]
public string CostCenter { get; set; }
[XmlElement(ElementName = "DeliveryNote")]
public string DeliveryNote { get; set; }
[XmlElement(ElementName = "Description")]
public string Description { get; set; }
[XmlElement(ElementName = "GLAccount")]
public string GLAccount { get; set; }
[XmlElement(ElementName = "GLDescription")]
public string GLDescription { get; set; }
[XmlElement(ElementName = "GoodReceipt")]
public string GoodReceipt { get; set; }
[XmlElement(ElementName = "InternalOrder")]
public string InternalOrder { get; set; }
[XmlElement(ElementName = "ItemNumber")]
public string ItemNumber { get; set; }
[XmlElement(ElementName = "LineType")]
public string LineType { get; set; }
[XmlElement(ElementName = "OrderNumber")]
public string OrderNumber { get; set; }
[XmlElement(ElementName = "Quantity")]
public string Quantity { get; set; }
[XmlElement(ElementName = "TaxAmount")]
public string TaxAmount { get; set; }
[XmlElement(ElementName = "TaxCode")]
public string TaxCode { get; set; }
[XmlElement(ElementName = "TaxJurisdiction")]
public string TaxJurisdiction { get; set; }
[XmlElement(ElementName = "TaxRate")]
public string TaxRate { get; set; }
}
}
反序列化XML的代码:
public static void DeserializeToObject(out Invoice invoice)
{
XmlSerializer serializer = new XmlSerializer(typeof(Invoice));
invoice = new Invoice();
using (FileStream fileStream = new FileStream(@"FILEPATH", FileMode.Open))
{
Invoice result = (Invoice)serializer.Deserialize(fileStream);
}
}
我尝试了多种可能的解决方案,但无法使其正常工作。这是我最后的选择。项目是一个集合。将您的班级改为:
[XmlRoot(ElementName = "ApproversList")]
public class ApproversList
{
[System.Xml.Serialization.XmlElementAttribute("item")]
public Item[] Item { get; set; }
}
未来提示,复制XML,转到Visual Studio,在新的C#文件中,单击编辑->粘贴特殊->将XML粘贴为类
我看不到您正在使用的代码反序列化xml的代码,您没有显示它。我可以看到
ApproversList
应该有项的集合,而不是单个项的属性。@Crowcoder更正,ApproversList
是项的集合
很抱歉@Crowcoder,我已经在编辑中添加了该函数。警告:粘贴xml,因为类往往会创建不合适的数据类型,因此需要进行一些调整。啊,是的,粘贴特别功能非常出色!我这次真的用了。谢谢你的建议@Andrewerese对项目[]的更改