2013-02-09 18 views
5

Ich erhalte XML-Daten aus einer HTTP-Webanforderung und Deserialisierung der Daten in Objekte.Deserialisieren verschachtelter XML in C# -Objekte

Hier ist eine Beispiel-XML-Struktur.

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

Ich habe vier Klassen

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

Ich fühle mich wie drei Klassen genug sein sollte - einen Auftrag [] in Benutzerklasse und loszuwerden ‚Orders‘ Klasse. Ist das möglich? Was auch immer ich versuchte, funktionierte nicht.

Danke.

+0

arbeiten aber hinzuzufügen, was ist es, dass Sie versucht? –

+0

** Wie hat es nicht funktioniert **? Wir sind keine Gedankenleser. –

+0

Warum ist das wichtig? Es hat nicht funktioniert. – user471317

Antwort

12

Dies sollte

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

Sie können nur 3 Klassen verwenden. Alles, was Sie tun müssen, ist Xml.Serialization.XmlType zu Ihren Klassen

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