簡體   English   中英

無法反序列化子元素到對象列表

[英]Cannot deserialize sub-elements to list of objects

我在將XML元素序列化為對象列表時遇到問題。

這是XML:

<result>
  <stats>
    <numitemsfound>1451</numitemsfound>
    <startfrom>0</startfrom>
  </stats>
  <items>
    <item>
      <id>1</id>
      <markedfordeletion>0</markedfordeletion>
      <thumbsrc>
      </thumbsrc>
      <thumbsrclarge>
      </thumbsrclarge>
      ...
      <datasource>65</datasource>
      <data>
        <amount>100</amount>
        <kj>389</kj>
        <kcal>92.91</kcal>
        <fat_gram>0.2</fat_gram>
        <fat_sat_gram>-1</fat_sat_gram>
        <kh_gram>20.03</kh_gram>
      </data>
      <servings>
        <serving>
          <serving_id>386</serving_id>
          <weight_gram>150</weight_gram>
        </serving>
      </servings>
    </item>
</result>

我准備序列化的類是

 [XmlType("item")]
    public class Item
    {
        [XmlAttribute("id")]
        public string id { get; set; }
        [XmlAttribute("markedfordeletion")]
        public string markedfordeletion { get; set; }
        ...
        [XmlAttribute("datasource")]
        public string datasource { get; set; }

        [XmlElement("data")]
        public Data data { get; set; }

        [XmlElement("servings")]
        public List<Serving> servings { get; set; }
    }
}

這就是我嘗試序列化xml的方式

public void ParseSearch(string xml)
{
    XmlSerializer serializer = new XmlSerializer(typeof(List<Item>), new XmlRootAttribute("item"));
    StringReader stringReader = new StringReader(xml);
    var productList = (List<Item>)serializer.Deserialize(stringReader);
}

但是我收到了錯誤----> System.InvalidOperationException : <result xmlns=''> was not expected. 您能幫我解決這個問題嗎?

您必須使用序列化程序來序列化result實例, result不是List類型:

XmlSerializer serializer = new XmlSerializer(typeof(Result), new XmlRootAttribute("result"));  //whatever `Result` actually is as type).

您不能僅對文檔的一部分進行序列化和反序列化,就可以對整個文檔進行序列化或反序列化。

因此,您需要一個根類型:

[XmlRoot("result")]
public class Result
{
    public Stats Stats {get; set;}
    [XmlArray("items")]
    [XmlArrayItem("item")] 
    public List<Item> Items { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM