当XML具有特定的根元素名称时,如何将XML文件正确地读入集合?

本文关键字:XML 文件 正确地 集合 元素 | 更新日期: 2023-09-27 18:15:57

我需要阅读这个xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Products>
<Product Name="Prod1">
  <Description>Desc1</Description >
  <Price>100</Price >
  <Stock>200</Stock>
</Product>
<Product Name="Prod2">
  <Description>Desc2</Description >
  <Price>50</Price >
  <Stock>400</Stock>
</Product>
</Products>

我的想法是这样做:

        public ICollection<ProductDTO> importtProducts()
    {
        XmlSerializer deserializer = new XmlSerializer(typeof(List<ProductDTO>));
        TextReader textReader = new StreamReader(@"c:'importers'xmlimporter.xml");
        List<ProductDTO> prods;
        prods = (List<ProductDTO>)deserializer.Deserialize(textReader);
        textReader.Close();
        XDocument doc = XDocument.Load(@"c:'importers'xmlimporter.xml");
        foreach (var prod in doc.Root.Descendants("Product").Distinct())
        {
            //work with the prod in here
        }
        return some prods..;
    }

,但我有一些问题与根项目,xmlSerializer类型。有人知道我应该用哪一种吗?List, IList, ICollection, IEnumerable....

非常感谢!

当XML具有特定的根元素名称时,如何将XML文件正确地读入集合?

考虑用List创建一个Products对象。然后你可以这样标记你的对象:

public class Products
{
  [XmlElement("Product", Type = typeof(Product))]
  public List<Product> Products { get; set; }
}
public class Product
{
  [XmlAttribute("Name")]
  public string Name { get; set; }
  [XmlElement("Description")]
  public string Description { get; set; }
  ...
}

当使用

时,将生成一个Products类,它具有一个Product类型的列表:
XmlSerializer deserializer = new XmlSerializer(typeof(Products));

而不指定类型为列表

我添加了XmlAttribute("Name")来演示附加问题的解决方案。@pratik-gaikwad在我之前传达了解决方案