2013-03-13 61 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, 
         } 
      }; 

NodeChildNodeNumber1一次,所以我想它作爲一個對象,而不是作爲一個列表。即使var1var2NodeChild中定義一次 - 但它們並不成問題,因爲我使用FirstOrDefault)。

我如何將它創建爲單個對象而不是列表?

+0

,那麼您已經來到這裏輸出的兩個 「級別」 - 一個有名稱/ MyObj中,和一個與VAR1/VAR2。你想做什麼單數? (示例XML和預期的輸出將會很有用。) – 2013-03-13 13:51:49

+0

我得到名稱 - 已經是單數,而MyObj作爲具有Var1/Var2的列表,我希望此列表將成爲單個對象。 – 2013-03-13 13:53:00

+0

所以你希望'myList'仍然是一個列表?你能否看到你的問題是如何令人困惑的,並且可以用樣本XML和預期輸出得到更清晰的描述?下次請牢記這一點。 – 2013-03-13 14:12:13

回答

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

你的建議奏效了,我編輯了你的答案,因爲我想讓內部列表成爲單個對象而不是外部列表 – 2013-03-13 14:01:42