C# 使用字典解析Xml<;字符串,列表<;MyObject>&燃气轮机;

C# 使用字典解析Xml<;字符串,列表<;MyObject>&燃气轮机;,c#,wpf,xml-parsing,windows-phone,linq-to-xml,C#,Wpf,Xml Parsing,Windows Phone,Linq To Xml,我正在开发Windows Phone 8应用程序 我有一个如下所示的xml: <array> <dict> <key>SubTopics</key> <array> <dict> <key>ID</key> <array>

我正在开发Windows Phone 8应用程序

我有一个如下所示的xml:

<array>
    <dict>
        <key>SubTopics</key>
        <array>
            <dict>
                <key>ID</key>
                <array>
                    <string>CD1</string>
                    <string>CD2</string>
                    <string>CD3</string>
                    <string>CD4</string>    
                </array>
                <key>Title</key>
                <string>Miscellaneous</string>
                <key>Desc</key>
                <string> this is just a text</string>
                <key>HasItems</key>
                <true/>
            </dict>
            <dict>
                <key>ID</key>
                <array>
                    <string>DDC1</string>
                    <string>DDC2</string>
                    <string>DDC3</string>
                    <string>DDC4</string>
                    <string>DDC5</string>
                </array>
                <key>Title</key>
                <string>Miscellaneous One</string>
                <key>Desc</key>
                <string> this is just a text</string>
                <key>HasItems</key>
                <true/>
            </dict>
      </array>
      <key>MainTitle</key>
      <string>Data</string>
    </dict>
    <dict>
        <key>SubTopics</key>
        <array>
            <dict>
                <key>ID</key>
                <array>
                    <string>SSD1</string>
                    <string>SS2</string>
                    <string>SS3</string>
                    <string>SS4</string>    
                </array>
                <key>Title</key>
                <string>Goblins</string>
                <key>Desc</key>
                <string> this is just a text</string>
                <key>HasItems</key>
                <true/>
            </dict>
            <dict>
                <key>ID</key>
                <array>
                    <string>ADC1</string>
                    <string>ADC2</string>
                    <string>ADC3</string>
                    <string>ADC4</string>
                    <string>DDC5</string>
                </array>
                <key>Title</key>
                <string>Tracks</string>
                <key>Desc</key>
                <string> this is just a text</string>
                <key>HasItems</key>
                <true/>
            </dict>
      </array>
      <key>MainTitle</key>
      <string>Data Two</string>
    </dict>
</array>
现在在第一个屏幕中,我显示了所有的主要标题

现在,在第一个屏幕中单击主磁贴,我需要该主标题的所有值

那么我如何将这些存储到
字典中呢

编辑

我试过这个:

var dict = (from plist in doc.Root.Element("array").Elements("dict")
                          select new MyObject
                          {
                              MainTitle = (string)plist.Element("string"),
                              ListOfSubTitles = plist.Element("array")
                                                   .Elements("dict")
                                                   .Elements("string")
                                                   .Select(s => (string)s)
                                                   .ToList(),
                          })
                         .ToDictionary(a => a.MainTitle, a => a.ListOfSubTitles);

但在这里,它还将Desc标记值存储在子标题列表中,我建议使用helper方法。第一个是从奇怪的xml数据格式创建值字典(它使用
key
元素值作为字典条目键,下一个节点作为字典条目值):

所有解析将如下所示:

XDocument xdoc = XDocument.Load(path_to_xml);
var result = 
    xdoc.Root.Elements("dict")
        .Select(GetValues)
        .ToDictionary(v => (string)v["MainTitle"],
                      v => v["SubTopics"]
                              .Elements("dict").Select(ParseMyObject).ToList());
解析结果:

{
  "Data": [
    {
      MainTitle: "Miscellaneous",
      ListOfSubTitles: [ "CD1", "CD2", "CD3", "CD4" ]
    },
    {
      MainTitle: "Miscellaneous One",
      ListOfSubTitles: [ "DDC1", "DDC2", "DDC3", "DDC4", "DDC5" ]
    }
  ],
  "Data Two": [
    {
      MainTitle: "Goblins",
      ListOfSubTitles: [ "SSD1", "SS2", "SS3", "SS4" ]
    },
    {
      MainTitle: "Tracks",
      ListOfSubTitles: [ "ADC1", "ADC2", "ADC3", "ADC4", "DDC5" ]
    }
  ]
}

你试过解析这个xml吗?你能展示你的尝试吗?问问你的同学。我确信这至少是第三次。“再也没有人自己做作业了吗?”谢尔盖贝雷佐夫斯基请看我的报告edit@L.B是我的同事在另一家公司工作country@user3114009你决定在这里而不是他?我会试试这个,让你知道,请等一下,应该是数据,子主题,数据两个子主题我们将在第一屏显示数据和数据二,点击数据我需要得到所有的子主题,再次点击每个子主题我需要得到所有的IDOk,谢谢给我2分钟,我将尝试一次,而且现在我可以assing Dictionary dicts=xdoc.Root.Elements(“dict”)。。。对吗?@user3114009是的,结果是
Dictionary
static MyObject ParseMyObject(XElement dict)
{
    var values = GetValues(dict);

    return new MyObject
    {
        MainTitle = (string)values["Title"],
        ListOfSubTitles = values["ID"].Elements().Select(s => (string)s).ToList()
    };
}
XDocument xdoc = XDocument.Load(path_to_xml);
var result = 
    xdoc.Root.Elements("dict")
        .Select(GetValues)
        .ToDictionary(v => (string)v["MainTitle"],
                      v => v["SubTopics"]
                              .Elements("dict").Select(ParseMyObject).ToList());
{
  "Data": [
    {
      MainTitle: "Miscellaneous",
      ListOfSubTitles: [ "CD1", "CD2", "CD3", "CD4" ]
    },
    {
      MainTitle: "Miscellaneous One",
      ListOfSubTitles: [ "DDC1", "DDC2", "DDC3", "DDC4", "DDC5" ]
    }
  ],
  "Data Two": [
    {
      MainTitle: "Goblins",
      ListOfSubTitles: [ "SSD1", "SS2", "SS3", "SS4" ]
    },
    {
      MainTitle: "Tracks",
      ListOfSubTitles: [ "ADC1", "ADC2", "ADC3", "ADC4", "DDC5" ]
    }
  ]
}