我有一个配置文件,例如:
<ConfigurationFile>
<Config name="some.configuration.setting" value="some.configuration.value"/>
<Config name="some.configuration.setting2" value="some.configuration.value2"/>
...
</ConfigurationFile>
我正在尝试将其读取为 XML 并将其转换为字典。我尝试编写一些这样的代码,但这显然是错误的,因为它无法编译。
Dictionary<string, string> configDictionary = (from configDatum in xmlDocument.Descendants("Config")
select new
{
Name = configDatum.Attribute("name").Value,
Value = configDatum.Attribute("value").Value,
}).ToDictionary<string, string>(Something shoudl go here...?);
如果有人能告诉我如何让它工作,那将非常有帮助。当然,我总是可以阅读它
最佳答案
要给出更详细的答案 - 您可以完全按照您在问题中所写的那样使用 ToDictionary
。在缺少的部分,您需要指定“键选择器”和“值选择器”,这两个函数告诉 ToDictionary
方法您要转换的对象的哪个部分是键,哪个是键一个值。您已经将这两个提取为匿名类型,因此您可以这样写:
var configDictionary =
(from configDatum in xmlDocument.Descendants("Config")
select new {
Name = configDatum.Attribute("name").Value,
Value = configDatum.Attribute("value").Value,
}).ToDictionary(o => o.Name, o => o.Value);
请注意,我删除了通用类型参数规范。 C# 编译器会自动计算(我们使用的是 overload with three generic arguments )。但是,您可以避免使用匿名类型——在上面的版本中,您只是创建它来临时存储值。最简单的版本就是:
var configDictionary =
xmlDocument.Descendants("Config").ToDictionary(
datum => datum.Attribute("name").Value,
datum => datum.Attribute("value").Value );
关于c# - 使用LINQ将XML解析成Dictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4800444/