2015-03-18 1 views
0

Я хочу преобразовать XElement в свой список объектов. У меня есть объект «Car» и в функции справки i create XElement Когда я конвертирую его с linq, я получаю пустой список. вот что я писал:XElement to list in C#

public class Car 
{ 
    public int row{ get; set; }; 
    public int seat{ get; set; } 

    public Car() 
    { 

    } 
} 

public static void help() 
    { 
     XElement root = new XElement("Car", 
      new XElement("seat", 
      new XElement("row", "4"), 
      new XElement("Chair", "2")), 

      new XElement("seat", 
      new XElement("row", "3"), 
      new XElement("Chair", "2")), 

      new XElement("seat", 
      new XElement("row", "5"), 
      new XElement("Chair", "2")) 
      ); 


     List<Seat> a = root.Elements("Car").Select(s=>s.Element("seat")).Select(sv => new Car()  
     { 
      row= (int)sv.Element("row"), 
      seat= (int)sv.Element("Chair") 
     }).ToList(); 
} 

ответ

2
List<Car> list = root.Elements("seat").Select(sv => new Car() 
{ 
    row = (int)sv.Element("row"), 
    seat = (int)sv.Element("Chair") 
}).ToList(); 

С root вы уже "внутри" Car элемента.

Обратите внимание, что вы можете создать полный XDocument:

var doc = new XDocument(root); 

List<Car> list2 = doc.Elements("Car").Elements("seat").Select(sv => new Car() 
{ 
    row = (int)sv.Element("row"), 
    seat = (int)sv.Element("Chair") 
}).ToList(); 

Таким образом, doc бы "вне" Car элемента.

Вы могли тогда даже:

List<Car> list3 = doc.Root.Elements("seat").Select(sv => new Car() 
{ 
    row = (int)sv.Element("row"), 
    seat = (int)sv.Element("Chair") 
}).ToList(); 
+0

Спасибо и !!!! это хорошо работает – tokenaizer