2013-10-07 98 views
0

我這個XML轉換:使用轉換XML字典

<root> 
    <item id="1" level="1" /> 
    <item id="2" level="1"> 
     <item id="3" level="2" /> 
     <item id="4" level="2" > 
      <item id="5" level="3"> 
       <item id="6" level="4" /> 
      </item> 
     </item> 
     <item id="7" level=2" /> 
    </item> 
</root> 

成字典這樣的:

XElement root = XElement.Parse(strSerializedoutput); 
Dictionary<int, Pair> list = root.Descendants("item").ToDictionary(x => (int)x.Attribute("id"), x => 
{ 
    var pId = x.Parent.Attribute("id"); 
    var depthLevel = x.Attribute("level"); 
    if (pId == null) 
    { 
     return new { parentID = 0, level = (int)depthLevel }; 
    } 
    else 
    { 
     return new { parentID = (int)pId, level = (int)depthLevel }; 
    } 
}); 

,其中對爲:

public class Pair 
    { 
     int parentID; 
     int level; 
    } 

輸出我想:

ID | ParentID | level 
------------------------ 
1  NULL   1 
2  NULL   1 
3  2   2 
4  2   2 
5  4   3 
6  5   4 
7  2   2 

,但我得到一個錯誤說

錯誤35無法隱式轉換 型 'System.Collections.Generic.Dictionary INT,AnonymousType#1' 到「System.Collections.Generic.Dictionary INT,ProposalSystem.handlers。 main.Pair」

回答

2
XElement root = XElement.Parse(strSerializedoutput); 
Dictionary<int, Pair> list = root.Descendants("item") 
           .ToDictionary(x => (int) x.Attribute("id"), 
            x => { 
          var pId = x.Parent.Attribute("id"); 
          var depthLevel = x.Attribute("level"); 
          return pId == null ? new Pair { parentID = 0, level = (int)depthLevel } : 
          new Pair { parentID = (int)pId, level = (int)depthLevel }; 
          }); 

public class Pair 
{ 
    public int parentID; 
    public int level; 
} 
+0

當我使用新的對,我得到以下errors.Error 無法轉換lambda表達式鍵入「System.Collections.Generic.IEqualityComparer 」,因爲它不是一個委託類型,也 錯誤'ProposalSystem.handlers.main.Pair.parentID'由於其保護級別而無法訪問 –

+0

@PrakashChennupati您的'Pair'應該有'public' memebers定義 –

+0

啊謝謝!得到它了! –

2

你的字典是類型:

Dictionary<int, Pair> 

然而,對於元素類型,不必返回Pair但這種匿名類型:

return new { parentID = 0, level = (int)depthLevel };