Deserializing nested xml into C# objects

前端 未结 2 1192
陌清茗
陌清茗 2020-12-10 16:49

I am retrieving xml data from an http web request and deserializing the data into objects.

Here is a sample xml structure.


    

        
相关标签:
2条回答
  • 2020-12-10 17:08

    You can use just 3 classes. All you have to do is to add Xml.Serialization.XmlType to your classes

    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;
    } 
    
    0 讨论(0)
  • 2020-12-10 17:09

    This should work

    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; }
    }
    
    0 讨论(0)
提交回复
热议问题