Linq2XML创建对象模型

本文关键字:对象模型 创建 Linq2XML | 更新日期: 2023-09-27 17:59:47

如果我有以下xml;

<productList>
  <product>
    <id>1</id>
    <name>prod 1</name>
  </product>
  <product>
    <id>2</id>
    <name>prod 2</name>
  </product>
  <product>
    <id>3</id>
    <name>prod 3</name>
  </product>
</productList>

如何使用Linq2XML创建对象高度?

我已经试过了;

var products = from xProducts in xDocument.Descendants("root").Elements("productList")
  select new
  {
    product = from xProduct in xProducts.Elements("product")
    select new
    {
      id = xProduct.Element("id").Value,
      name = xProduct.Element("name").Value
    }
  }

然而,这会产生一个错误,因为我认为product被声明了不止一次。

我想得到一个这样的物体;

ProductList
  List<product>
    id
    name

我不能有一个模型,这些将进入,所以我需要使用变种

编辑

如果我只得到名字或id,那么代码就可以工作了。只有当我尝试同时获取两个字段时,它才会失败。

Linq2XML创建对象模型

关于您的错误,您正在使用Silverlight吗?这不支持匿名类型。无论如何,比起查询语法,Linq-to-XML使用流畅的语法效果更好。定义合适的ProductList和Product类时,以下内容应该有效:

class ProductList : List<Product>
{
   public ProductList(items IEnumerable<Product>) 
         : base (items)
   {
   }
}
class Product
{
  public string ID { get; set;}
  public string Name{ get; set;}
}
var products = xDocument.Desendants("product");
var productList = new ProductList(products.Select(s => new Product()
    {
      ID = s.Element("id").Value,
      Name= s.Element("name").Value
    });