将XML转换为c#字典



我有一个XML响应,看起来像:

<?xml version="1.0" encoding="utf-8"?>
<response>
  <scheme>
    <name>name_1</name>
    <items>
      <item>
        <itemid>testid_1</itemid>
        <new></new>
        <used></used>
      </item>
      <item>
        <itemid>testid_2</itemid>
        <new></new>
        <used></used>
      </item>
    </items>
  </scheme>
  <scheme>
    <name>name_2</name>
    <items>
      <item>
        <itemid>testid_3</itemid>
        <new></new>
        <used></used>
      </item>
    </items>
  </scheme>
</response>

我必须将此XML响应转换为Dictionary<string, List<Item>>。字典中的每个条目都是一个<scheme>元素,其中字典的键是<name>节点,字典的值是List<Item>,其中Item对象由itemid, newused组成。

到目前为止,我得到的代码看起来像:
var items =
            from item in itemsXml.Descendants("scheme")
            select new Item
            {
                ItemId = item.Element("itemid").Value,
                New = item.Element("new").Value,
                Used = item.Element("used").Value,
            };

所以我上面的代码将为我创建一个Item列表,但是我如何访问每个<scheme>节点中的<name>节点?同样,<name>是密钥,每个方案下的List<Item>是我的Dictionary的值。

有什么建议吗?? ??我肯定做得不对…

试试这个方法:

var dict = xml.Elements("scheme")
              .ToDictionary(e => e.Element("name").Value,
                            e => e.Descendants("item")
                                  .Select(item => new Item()
                                  {
                                      ItemId = item.Element("itemid").Value,
                                      New = item.Element("new").Value,
                                      Used = item.Element("used").Value
                                  }).ToList()
                           );

必须是字典吗?

我问的原因是,你可以创建一个item类,它有你的item属性。然后创建一个方案类,它有一个名为"Name"的属性和一个List属性。

然后你可以使用。net反序列化来创建一个方案列表,每个方案都有一个项目列表。

类似:

public class Response
{
    public IList<Scheme> Schemes {get; set;}
}
public class Scheme
{
    public string Name {get; set;}
    public IList<Item> Items {get; set;}
}
public class Item
{
    public string ItemId {get; set;}
    public bool New {get; set;}
    public bool Used {get; set;}
}

然后按照下面的教程:http://sharpertutorials.com/serialization/让。net为你做反序列化。

当然,如果你必须做一个字典,这将不起作用。

相关内容

  • 没有找到相关文章