【问题标题】:How to deserialize XML collection to dictionary in .NET?如何将 XML 集合反序列化为 .NET 中的字典?
【发布时间】:2011-09-21 09:39:34
【问题描述】:

假设我有以下 XML: <appSettings> <add key="key1" value="value1" /> <add key="key2" value="value2" /> <add key="key3" value="value3" /> <add key="key4" value="value4" /> </appSettings>

我想将其转换为如下对象:

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

等等……

我已经在互联网上查找了它,但还没有找到有用的东西。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: c# .net xml serialization


    【解决方案1】:

    简单。

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

    【讨论】:

    • 我正在寻找使用 XML 反序列化的解决方案,而不是像 codeproject.com/KB/aspnet/CustomXmlConfigForAspNet.aspx 中的 LINQ
    • @Yossi - 我认为您需要在问题中提供更多信息。我(和其他人)提出的是非常有效的反序列化。我猜你也想要序列化,也许不仅仅是一个类似字典的对象?
    【解决方案2】:

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

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

    【讨论】:

    • 我正在寻找使用 XML 反序列化的解决方案,而不是像 codeproject.com/KB/aspnet/CustomXmlConfigForAspNet.aspx 中那样使用 LINQ 的解决方案
    【解决方案3】:
    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();
    

    【讨论】:

    • 我正在寻找使用 XML 反序列化的解决方案,而不是像 codeproject.com/KB/aspnet/CustomXmlConfigForAspNet.aspx 中那样使用 LINQ 的解决方案
    • 那你为什么不把你自己的反序列化代码改正呢?只需创建一个继承自 Dictionary 的自定义类并实现 IXmlSerializable ?
    • 你明白了。这就是我想要做的,它不会'工作:)
    猜你喜欢
    • 2021-08-19
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多