2013-02-09 35 views
5

में नेस्टेड एक्सएमएल deserializing मैं http वेब अनुरोध से एक्सएमएल डेटा पुनर्प्राप्त कर रहा हूँ और डेटा को वस्तुओं में deserializing।सी # ऑब्जेक्ट्स

यहां एक नमूना एक्सएमएल संरचना है। एक आदेश [] उपयोगकर्ता में वर्ग है और 'आदेश' वर्ग से छुटकारा पाने के -

<users> 
    <user> 
     <name>...</name> 
     <orders> 
      <order> 
       <number>...</number> 
      </order>   
      ... 
     </orders> 
    </user> 
    <user> 
     <name>...</name> 
     <orders></orders> 
    </user> 
    ... 
</users> 

मैं चार वर्गों

public class Users 
{ 
    [XmlElement("user")] 
    public User[] UserList { get; set; } 
} 

public class User 
{ 
    [XmlElement("name")] 
    public string Name { get; set; } 

    [XmlArray("orders")] 
    public Orders OrderList { get; set; } 
} 

public class Orders 
{ 
    [XmlElement("order")] 
    public Order[] Order { get; set; } 
} 

public class Order 
{ 
    [XmlElement("number")] 
    public string Number { get; set; } 
} 

मुझे लगता है तीन वर्गों की तरह पर्याप्त होना चाहिए। क्या यह संभव है? मैंने जो भी कोशिश की वह काम नहीं कर सका।

धन्यवाद।

+0

काम करना चाहिए लेकिन यह क्या है कि तुम कोशिश की है? –

+0

** यह कैसे काम नहीं किया **? हम दिमागी पाठक नहीं हैं .. –

+0

यह महत्वपूर्ण क्यों है? काम नहीं किया। – user471317

उत्तर

12

को Xml.Serialization.XmlType जोड़ने के लिए यह

XmlSerializer ser = new XmlSerializer(typeof(Users)); 
var u = (Users)ser.Deserialize(stream); 


[XmlRoot("users")] 
public class Users 
{ 
    [XmlElement("user")] 
    public User[] UserList { get; set; } 
} 

public class User 
{ 
    [XmlElement("name")] 
    public string Name { get; set; } 

    [XmlArray("orders"),XmlArrayItem("order")] 
    public Order[] OrderList { get; set; } 
} 

[XmlRoot("order")] 
public class Order 
{ 
    [XmlElement("number")] 
    public string Number { get; set; } 
} 
2

आप केवल 3 कक्षाओं का उपयोग कर सकते हैं। आपको बस इतना करना है अपनी कक्षाओं

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 

[Xml.Serialization.XmlType("users", IncludeInSchema = true)] 
public class Users 
{ 
[XmlElement("user")] 
public List<User> UserList { 
    get { 
     if (m_UserList == null) { 
      m_UserList = new List<User>(); 
     } 
     return m_UserList; 
    } 
} 

private List<User> m_UserList; 
} 
[Xml.Serialization.XmlType("user", IncludeInSchema = true)] 
public class User 
{ 
[XmlElement("name")] 
public string Name { 
    get { return m_Name; } 
    set { m_Name = value; } 
} 

private string m_Name; 
[XmlArray("orders")] 
public List<Orders> OrderList { 
    get { 
     if (m_OrderList == null) { 
      m_OrderList = new List<Orders>(); 
     } 
     return m_OrderList; 
    } 
} 
private List<Orders> m_OrderList; 
} 
[Xml.Serialization.XmlType("orders", IncludeInSchema = true)] 
public class Orders 
{ 
[XmlElement("number")] 
public string Number { 
    get { return m_Number; } 
    set { m_Number = value; } 
} 
private string m_Number; 
}