2011-04-28 23 views
0

我有以下XML:在c#中反序列化xml的最佳方式?

<return_obj from_call_to="categories"> 
    <categories> 
    <category> 
     <value>12341234</value> 
     <label>First</label> 
    </category> 
    <category> 
     <value>242234234</value> 
     <label>Another</label> 
    </category> 
    </categories> 
</return_obj> 

這樣標記的對象序列化到

[XmlRoot(ElementName = "return_obj")] 
public class returnobject 
{ 
    [XmlElement] 
    public category[] categories { get; set; } 
} 

public class category 
{ 
    [XmlElement] 
    public string value { get; set; } 
    [XmlElement] 
    public string label { get; set; } 
} 

這一點,並試圖以此來始終做到這一點

var ser = new XmlSerializer(typeof (returnobject)); 
    var obj = (returnobject)ser.Deserialize(File.OpenRead("test.xml")); 

然而,類別集合有些ups無效。

我在做什麼錯?有沒有更好的辦法?

感謝

回答

1

XmlSerializer只查看公共字段和屬性,因此您必須在returnobject類中公開categories

你也需要指定要使用XML陣列容器的名字,你的情況categories - 這個工作對我來說:

[XmlRoot(ElementName = "return_obj")] 
public class returnobject 
{ 
    [XmlArray("categories")] 
    [XmlArrayItem("category")] 
    public category[] categories { get; set; } 
} 
+0

謝謝,那是反序列化的「類別」,但只加載1個單一類別,並且這兩個值/標籤都是空的.. – andryuha 2011-04-28 15:29:06

+0

@andryuha:檢查我的編輯,我們必須同時發佈 – BrokenGlass 2011-04-28 15:29:48

+0

真棒,那樣做.. .is這是做xml反序列化的常用方法嗎? – andryuha 2011-04-28 15:31:59

2

categories場公衆class returnobject。這將有所幫助。

0

僅供參考,XmlSerializer的具有生成序列化類型的類型信息。這可能需要一段時間,所以你可能會發現序列化和反序列化需要幾百毫秒。您可以通過運行SGEN預先生成序列化程序集來解決此問題。

或者,您可以使用XmlReader來讀取XML,並自己編寫序列化代碼。這是更多的代碼,但總是表現良好,並沒有額外的組裝(生成或沒有)的負擔。

+0

您可以指定的任何示例我也是?謝謝 – andryuha 2011-04-28 19:18:41