【问题标题】:C# XML Parse double tag to listC# XML 解析双标签以列出
【发布时间】:2020-02-05 12:11:59
【问题描述】:

我有问题。我有以下类将我的 XML 解析为:

[XmlRoot(ElementName = "picture")]
public class SetPicture
{
    [XmlElement(ElementName = "id")]
    public string Id { get; set; }
    [XmlElement(ElementName = "name")]
    public string Name { get; set; }
    [XmlElement(ElementName = "size")]
    public string Size { get; set; }
    [XmlElement(ElementName = "price")]
    public string Price { get; set; }
    [XmlElement(ElementName = "quantity")]
    public string Quantity { get; set; }
    [XmlElement(ElementName = "sizes")]
    public List<Size> Sizes { get; set; }
    [XmlIgnore]
    public ImageSource imageSource { get; set; }
}

[XmlRoot(ElementName = "set")]
public class Set
{
    [XmlElement(ElementName = "name")]
    public string Name { get; set; }
    [XmlElement(ElementName = "price")]
    public string Price { get; set; }
    [XmlElement(ElementName = "pictures")]
    public List<SetPicture> Pictures { get; set; }
}

[XmlRoot(ElementName = "sets")]
public class Sets
{
    [XmlElement(ElementName = "set")]
    public List<Set> Set { get; set; }
}

[XmlRoot(ElementName = "data")]
public class Data
{
    [XmlElement(ElementName = "sets")]
    public Sets Sets { get; set; }
}

我收到以下 XML:

<data>
   <sets>
      <set>
         <name>Set A</name>
         <price>13.9</price>
         <pictures>
            <picture>
               <id>4</id>
               <name>Potret2.jpg</name>
               <size>13 x 18 mat</size>
               <price>6.95</price>
               <quantity>2</quantity>
            </picture>
            <picture>
               <id>5</id>
               <name>Potret2Pasfoto.jpg</name>
               <size>13 x 18 mat</size>
               <price>6.95</price>
               <quantity>1</quantity>
            </picture>
         </pictures>
      </set>
   </sets>
</data>

但是在将 XML 解析为 Class 之后,我得到一个空的 List&lt;SetPicture&gt; Pictures。我想我知道出了什么问题,因为我将标签 &lt;pictures&gt; 解析到列表中,但我需要将元素 &lt;picture&gt; 解析到列表中。

我该如何解决这个问题?

【问题讨论】:

  • [XmlElement(ElementName = "pictures")][XmlElement(ElementName = "picture")]
  • 不,已经尝试过了,但仍然返回一个空列表

标签: c# xml parsing


【解决方案1】:

方法 1 - 更改 Set 类。使用Pictures 创建具有Picture 列表的新类

[XmlRoot(ElementName = "set")]
public class Set
{
    [XmlElement(ElementName = "name")]
    public string Name { get; set; }
    [XmlElement(ElementName = "price")]
    public string Price { get; set; }
    [XmlElement(ElementName = "pictures")]
    public Pictures Pictures { get; set; }
}

[XmlRoot(ElementName = "pictures")]
public class Pictures
{
    [XmlElement(ElementName = "picture")]
    public List<SetPicture> Picture { get; set; }
}

方法 2 - 将 XmlElement 更改为 XmlArray

[XmlRoot(ElementName = "set")]
public class Set
{
    [XmlElement(ElementName = "name")]
    public string Name { get; set; }
    [XmlElement(ElementName = "price")]
    public string Price { get; set; }
    [XmlArray("pictures")]
    [XmlArrayItem("picture", typeof(SetPicture))]
    public List<SetPicture> Pictures { get; set; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 2016-04-24
    • 2010-12-16
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多