如何使用嵌套数组元素反序列化XML?

时间:2014-08-07 12:46:20

标签: c# xml xml-deserialization

使用嵌套的元素数组反序列化XML文件

我搜索过但看不到任何有用的例子。

这是我的XML示例:

<trans>
  <orderNo>0001</orderNo>
  <orderDate>08/07/2014</orderDate>
  <orders>
    <item>
      <itemName>item1</itemName>
      <itemAmount>200</itemAmount>
      <itemMeasures>
        <measure>each</measure>
        <measure>case</measure>
      </itemMeasures>
    </item>
    <item>
      <itemName>item2</itemName>
      <itemAmount>100</itemAmount>
      <itemMeasures>
        <measure>each</measure>
        <measure>case</measure>
      </itemMeasures>
    </item>
  </orders>
</trans>

1 个答案:

答案 0 :(得分:3)

您必须为XML中的每个结构创建类,然后使用XmlSerializer和方法反序列化该类中的对象,您可以使用这些值创建嵌套数组。如果您需要代码和示例,请使用完整的xml结构编辑您的帖子。 有关xml的一部分,请参阅下面的示例:

[XmlType("trans")]
public class Trans
{
    [XmlElement("orderNo")]
    public string OrderNo { get; set; }

    [XmlElement("orderDate")]
    public string OrderDate { get; set; }

    [XmlArray("orders")]
    public HashSet<Item> Orders { get; set; }
}

[XmlType("item")]
public class Item
{
    [XmlElement("itemName")]
    public string ItemName { get; set; }

    [XmlElement("itemAmount")]
    public string ItemAmount { get; set; }
}

反序列化代码是:

XmlSerializer mySerializer = new XmlSerializer(typeof(Trans[]), new XmlRootAttribute("trans"));
using (FileStream myFileStream = new FileStream("XmlFile.xml", FileMode.Open))
{
    Trans[] r;
    r = (Trans[])mySerializer.Deserialize(myFileStream);
}