2013-03-18 74 views
0

我的應用程序有2個部分,一個Android客戶端和一個用c#編碼的Windows打印服務器。反序列化Java中由XStream生成的C#中的XML

我在java中使用Xstream將我的對象轉換爲XML(在android中)。這裏是它的一部分:

<ROOT> 
    <id>1</id> 
    <serial>92000</serial> 
    <date>2013/2/15</date> 

    <ITEMS> 

    <ITEM> 
     <name>/**SOMETHING**/</name> 
     <idd>/**SOMETHING**/</idd> 
     <pd>/**SOMETHING**/</pd> 
     <ed>/**SOMETHING**/</ed> 
    </ITEM> 
    <ITEM> 
     <name>/**SOMETHING**/</name> 
     <idd>/**SOMETHING**/</idd> 
     <pd>/**SOMETHING**/</pd> 
     <ed>/**SOMETHING**/</ed> 
    </ITEM> 
    <ITEM> 
     <name>/**SOMETHING**/</name> 
     <idd>/**SOMETHING**/</idd> 
     <pd>/**SOMETHING**/</pd> 
     <ed>/**SOMETHING**/</ed> 
    </ITEM> 

    </ITEMS> 

</ROOT> 

,你可以看到,我有2種對象類型,一個根對象類型和命名項目第二對象類型嵌套列表。 我可以讀取ROOT對象的名稱,序列和日期,但對於ITEMS對象的嵌套列表,它總是返回null。

類在C#中的根類是:

[XmlRoot("ROOT")] 
    public class ROOT_CLASS 
    { 

     [XmlElement("id")] 
     public string idVar{ get; set; } 

     [XmlElement("serial")] 
     public string serialVar{ get; set; } 

     [XmlElement("date")] 
     public string dateVar{ get; set; } 

     [XmlArray("ITEMS")] 
     [XmlArrayItem("ITEM")] 
    public List<NESTED_CLASS> oi { get; set; } 

    } 

,這裏是嵌套對象類:

[XmlRoot("ITEM")] 
    public class NESTED_CLASS 
    { 
     [XmlElement("name")] 
     public string nameVV; { get; set; } 
     [XmlElement("idd")] 
     public string iddVV; { get; set; } 
     [XmlElement("pd")] 
     public string pdVV; { get; set; } 
     [XmlElement("ed")] 
     public string edVV; { get; set; } 

    } 

沒關係,我怎樣才能反序列化NESTED_CLASS列表出這個XML的?正如我所說,我總是得到一個空值。請幫幫我。 感謝...

回答

0

使用XmlArray屬性

[XmlRoot(ElementName = "ROOT")] 
public class Root 
{ 
    public int id { get; set; } 
    public int serial { get; set; } 
    public string date { get; set; } 

    [XmlArray(ElementName = "ITEMS")] 
    [XmlArrayItem("ITEM")] 
    public List<RootItem> Items { get; set; } 
} 

public class RootItem 
{ 
    public string name { get; set; } 
    public string idd { get; set; } 
    public string pd { get; set; } 
    public string ed { get; set; } 
} 
+0

謝謝。不工作雖然:( – 2013-03-18 13:45:06

+0

不行,對你的例子工作:http://ideone.com/zkAiAL – jezzarax 2013-03-18 13:52:52

+0

我更新了這個問題,使它更具可讀性。 – 2013-03-18 13:57:26

0

除了手動做這個的,你還可以通過使用XSD.EXE生成你的C#類。這可能更容易,並且在xml隨時間變化的情況下更快;你不必擔心你現在遇到的問題。

請參閱Generate C# class from XML瞭解如何做到這一點的示例。

請注意,如果您使用的是非常大的xml文件,則此方法可能不是最好的方法,因爲它會將整個xml加載到內存中。如果是這種情況,您可能需要使用this方法。

+0

這也是很好的方法,非常靈活......但作爲一個菜鳥,一定要逐一採取措施,並在以後的工作中創造靈活的解決方案,但是謝謝你的出色答案 – 2013-03-19 10:48:13