首页 > 解决方案 > 将xml同名元素反序列化为List

问题描述

我正在尝试反序列化具有如下结构的 xml 文件:

<items>
   <item id="1">
      <group>1</group>
      <param name="Width">100</param>
      <param name="Length">100</param>
      <price>100</price>
      <name>Name 1</name>
      <param name="Weight" unit="gr">100</param>
   </item>

   <item id="2">
      <group>1</group>
      <param name="Width">200</param>
      <param name="Length">200</param>
      <price>200</price>
      <name>Name 2</name>
      <param name="Weight" unit="gr">200</param>
   </item>

   <item id="3">
      <group>3</group>
      <price>300</price>
      <name>Name 3</name>
      <param name="Weight" unit="lbs">300</param>
   </item>
</items>

唯一的问题是param元素。在不同item的元素中可以有 1 到 3 个param元素。我需要将它们全部反序列化,但列表Param总是空的。

我的反序列化类如下所示:

[XmlRoot("items")]
public class Items
{
    [XmlElement("item")]
    public List<Item> Items{ get; set; }
}

[XmlRoot("item")]
public class Item
{
    [XmlElement("group")]
    public int Group{ get; set; }

    [XmlAttribute(AttributeName = "id")]
    public string Id { get; set; }

    [XmlElement("name")]
    public string Name { get; set; }

    [XmlElement("price")]
    public decimal  Price { get; set; }

    [XmlElement("param")]
    public List<Param> Params { get; set; }

}


[XmlRoot("param")]
public class Param
{
    [XmlAttribute(AttributeName = "name")]
    public string Name { get; set; }
    
    [XmlAttribute(AttributeName = "unit")]
    public string Unit { get; set; }
    
    [DeserializeAs(Content = true)]
    public string Value { get; set; }
}

也尝试添加[XmlArray("param")][XmlArrayItem("param")]但结果是一样的。谁能告诉我这门课有什么问题。或者也许还有另一种方法可以将这些param元素反序列化为单独的属性?

标签: c#xmlrestsharpxml-deserialization

解决方案


推荐阅读