Linq2XML Создать объектную модель - PullRequest
1 голос
/ 22 июня 2011

Если у меня есть следующий 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

Я могу 'У меня нет модели, в которую они войдут, поэтому мне нужно использовать var.

edit

Если я получу только имя или идентификатор, тогда код работает.Сбой только в том случае, если я пытаюсь получить оба поля.

1 Ответ

3 голосов
/ 22 июня 2011

Что касается вашей ошибки, вы используете 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
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...