2011-09-21 115 views
4

假设我有以下XML: <appSettings> <add key="key1" value="value1" /> <add key="key2" value="value2" /> <add key="key3" value="value3" /> <add key="key4" value="value4" /> </appSettings>如何将XML集合反序列化为.NET中的字典?

,我想将其转换为一个对象,如:

AppSettings["key1"] = "value1"; AppSettings["key2"] = "value2"; AppSettings["key3"] = "value3";

等等...

我看着它在互联网上,还没有发现有用的东西。有人可以帮我解决这个问题吗?

回答

5

简单。

var xd = XDocument.Parse(xml); 

var AppSettings = xd.Root.Elements("add") 
    .ToDictionary(
     xe => xe.Attribute("key").Value, 
     xe => xe.Attribute("value").Value); 
+0

我期待使用的解决方案使用XML序列化和http://www.codeproject.com/KB不喜欢LINQ /aspnet/CustomXmlConfigForAspNet.aspx – Yossi

+0

@Yossi - 我认为你需要在你的问题中提供更多信息。我(和其他人)提出的是非常有效的反序列化。我猜你还想要序列化,也许不仅仅是一个类似字典的对象? – Enigmativity

0

你可以使用LINQ做到这一点很容易:

XElement appSettings = (...); // Parse your XML and get the root Element. 
var dict = appSettings.Elements().ToDictionary(el => el.Attribute("key"), el => el.Attribute("value")); 
+0

我正在寻找使用解决方案使用XML反序列化,而不是LINQ像codeproject.com/KB/aspnet/CustomXmlConfigForAspNet.aspx – Yossi

0
var xml = XDocument.Parse("<appSettings><add key=\"key1\" value=\"value1\" /> <add key=\"key2\" value=\"value2\" /> <add key=\"key3\" value=\"value3\" /> <add key=\"key4\" value=\"value4\" /> </appSettings>"); 
xml.Elements().First().Elements() 
    .Select (x => new { key = x.Attribute("key").Value, value = x.Attribute("value").Value }) 
    .ToDictionary(e => e.key, e => e.value).Dump(); 
+0

我正在寻找使用解决方案使用XML反序列化,而不是LINQ像codeproject.com/KB/aspnet/CustomXmlConfigForAspNet .aspx – Yossi

+0

那你为什么不直接用你自己的反序列化代码呢?只需创建一个从Dictionary继承的自定义类并实现IXmlSerializable? – VdesmedT

+0

你明白了。这就是我想要做的,它不会'工作:) – Yossi