代码之家  ›  专栏  ›  技术社区  ›  petko_stankoski

反序列化xml返回零个元素

  •  1
  • petko_stankoski  · 技术社区  · 6 年前

    这是我的xml:

    <?xml version="1.0"?>
    <orders>
      <order>
        <customer_id>5675757</customer_id>
        <order_code>6456</order_code>
        <products>
          <product>
            <product_item_code>577868</product_item_code>
            <product_item_amount>22</product_item_amount>
          </product>
        </products>
      </order>
    </orders>
    

    这是我的课:

    [XmlRoot(ElementName = "orders")]
    public class Orders
    {
        public List<OrderModel> OrdersList { get; set; }
    }
    
    [XmlRoot(ElementName = "order")]
    public class OrderModel
    {
        [XmlElement(ElementName = "customer_id")]
        public string CustomerId { get; set; }
    
        [XmlElement(ElementName = "order_code")]
        public string OrderCode { get; set; }
    
        [XmlElement(ElementName = "products")]
        public List<Product> products { get; set; }
    }
    
    [XmlRoot(ElementName = "product")]
    public class Product
    {
        [XmlElement(ElementName = "product_item_code")]
        public string product_item_code { get; set; }
    
        [XmlElement(ElementName = "product_item_amount")]
        public string product_item_amount { get; set; }
    }
    

    这是我的代码:

    using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
    {
        var serializer = new XmlSerializer(typeof(Orders));
        var orders = (Orders)serializer.Deserialize(fileStream);
    }
    

    但它返回0个元素。我知道我漏掉了一些显而易见的东西,但我不知道是什么。

    2 回复  |  直到 6 年前
        1
  •  2
  •   PinBack    6 年前

    换你的班 Orders OrderModel :

    [XmlRoot(ElementName = "orders")]
    public class Orders
    {
        [XmlElement(ElementName = "order")]
        public List<OrderModel> OrdersList { get; set; }
    }
    
    [XmlRoot(ElementName = "order")]
    public class OrderModel
    {
        [XmlElement(ElementName = "customer_id")]
        public string CustomerId { get; set; }
    
        [XmlElement(ElementName = "order_code")]
        public string OrderCode { get; set; }
    
        [XmlArray(ElementName = "products")]
        [XmlArrayItem(ElementName = "product")]
        public List<Product> products { get; set; }
    }
    

    那就应该有用了

        2
  •  0
  •   Akshey Bhat    6 年前

    修改你的类如下,它将工作。

    [XmlRoot(ElementName = "orders")]
    public class Orders
    {
        [XmlElement(ElementName = "order")]
        public List<OrderModel> OrdersList { get; set; }
    }
    
    public class OrderModel
    {
        [XmlElement(ElementName = "customer_id")]
        public string CustomerId { get; set; }
    
        [XmlElement(ElementName = "order_code")]
        public string OrderCode { get; set; }
    
        [XmlArray(ElementName = "products")]
        [XmlArrayItem(ElementName = "product")]
        public List<Product> products { get; set; }
    }
    
    public class Product
    {
        [XmlElement(ElementName = "product_item_code")]
        public string product_item_code { get; set; }
    
        [XmlElement(ElementName = "product_item_amount")]
        public string product_item_amount { get; set; }
    }