2013-03-13 2 views
0

Как вы создаете объект по XElement? Я могу создать список, но мне нужен один объект, а не список.Как создать объект из xml

Вот мой код:

XElement elem = XElement.Load(path); 
var myList = from n in elem.Descendants("NodeNumber1") 
      select new 
      { 
       Name = n.Attribute("Name").Value, 
       MyObj = from o in n.Descendants("NodeChild") 
         select new 
         { 
          var1 = o.Descendants("var1").FirstOrDefault().Value, 
          var2 = o.Descendants("var2").FirstOrDefault().Value, 
         } 
      }; 

NodeChild в NodeNumber1 один раз, так что я хочу его как объект, а не в виде списка. Даже var1 и var2 определены один раз в NodeChild - но это не проблема, потому что я использую FirstOrDefault).

Как я создам его как отдельный объект, а не как список?

+0

Ну у вас есть два "уровни" выход здесь - один с именем/MyObj, и один с var1/var2. Кого вы хотите сделать единственным? (Пример XML и ожидаемый результат были бы полезны.) –

+0

Я получаю имя - уже сингулярно, а MyObj как список с Var1/Var2, я хочу, чтобы этот список стал единственным объектом. –

+0

Итак, вы хотите, чтобы 'myList' все еще был списком? Вы видите, как ваш вопрос запутан, и его можно было бы более четко описать, с образцом XML и ожидаемым выходом? Пожалуйста, имейте это в виду в следующий раз. –

ответ

1
var axe = elem.Descendants("NodeNumber1") 
       .Select(n => new 
       { 
        Name= n.Attribute("Name").Value, 
        MyObj= from o in n.Descendants("NodeChild") 
          select new 
          { 
           var1= o.Descendants("var1").FirstOrDefault().Value, 
           var2= o.Descendants("var2").FirstOrDefault().Value, 
          } 
       }) 
       .First(); 

Или используя существующий запрос:

var axe = axesList.First(); 
+0

Ваше предложение сработало, я отредактировал ваш ответ, потому что я хотел, чтобы этот внутренний список был единственным объектом, а не внешним списком –

Смежные вопросы