如果我有以下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创建一个对象heiarchy?
我试过这个;
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
我不能拥有这些将进入的模型所以我需要使用var。
修改
如果我只说出名字或id,那么代码就可以了。如果我试图获得两个字段,它只会失败。
答案 0 :(得分:3)
关于您的错误,您使用的是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
});