2016-12-07 53 views
0

我在將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.你能幫我解決這個問題嗎?

回答

1

你必須要使用的序列化不List類型的result一個實例,一個串行:

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; } 
}