我的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>
元素,其中Dictionary的键是<name>
节点,而Dictionary的值是List<Item>
,其中Item
对象由itemid
组成。 new
,used
和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,
};
。
到目前为止,我的代码看起来像是:
<name>
所以我上面的代码会创建一个Item列表,但是如何访问每个<scheme>
节点中的<name>
节点?同样,List<Item>
是关键,每个方案下的{{1}}都是我的词典的值。
有关不同方法的任何建议吗?!?我绝对不会这样做..
答案 0 :(得分:4)
尝试这种方法:
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()
);
答案 1 :(得分:2)
它必须是字典吗?
我问的原因是,您可以创建具有商品属性的商品类。 然后创建一个scheme类,它具有一个名为“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为你做反序列化。
当然,如果你不得不做一本字典,这将不起作用。