将嵌套的xml反序列化为C#对象

我正在从http Web请求中检索xml数据并将数据反序列化为对象。

这是一个示例xml结构。

  ...   ...  ...    ...   ...  

我有四节课

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

我觉得三个类应该足够了 – 在User类中有一个Order []并摆脱’Orders’类。 那可能吗? 无论我尝试什么都行不通。

谢谢。

这应该工作

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

您只能使用3个class级。 您所要做的就是将Xml.Serialization.XmlType添加到您的类中

 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 UserList { get { if (m_UserList == null) { m_UserList = new List(); } return m_UserList; } } private List 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 OrderList { get { if (m_OrderList == null) { m_OrderList = new List(); } return m_OrderList; } } private List 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; }