用LINQ to XML填充字典

本文关键字:填充 字典 XML to LINQ | 更新日期: 2023-09-27 18:10:01

我使用LINQ to XML来解析XML文档并从该XML创建许多对象。其中一个对象有一个Dictionary作为属性,我需要从XML填充Dictionary。但是,我不确定这样做所需的实际语法。

我知道我需要获取属性值,并以某种方式将它们分配给字典中的键/值。

我该怎么做?

我有一个这样的模型类:

public class Statistics
{
    string Name { get; set; }
    public IDictionary<string, string> Information { get; set; }
}

和这样的XML:

  <section>
    <parameter name="this is a key" value="this is a value" />
    <parameter name="this is a key 2" value="this is a value 2" />
  </section>

在我的LINQ查询中,我需要设置namevalue属性的键和值。

根据我的理解,我需要做如下的事情:

.ToDictionary(x => x.name, x => x.value);

但我不确定如何将其应用于我的LINQ查询,以下代码是一个更大的LINQ到XML查询的一部分:

.Select(x => new Statistics
                {
                    Name = x.Attribute("name").Value,
                    Information = What goes here? .Select.Attributes? .ToDictionary(x => x.name, x => x.value);

用LINQ to XML填充字典

var dict = XDocument.Load(filename)
           .Descendants("parameter")
           .ToDictionary(p => p.Attribute("name").Value, p => p.Attribute("value").Value);

我认为这不是最好的解决方案。

我会这样做:

.Select(x => new Statistics
            {
                Name = x.Attribute("name").Value,
                Information = GetParameterDictionnary(sectionNode)
我将创建函数
private Dictionary<string, string> GetParameterDictionnary(XmlNode sectionNode)
{
    var dictionary = new Dictionary<string,string>();
    foreach(var child in sectionNode.Children)
    {
        dictionary.Add(child.Attribute("name"), child.Attribute("value"));
    }
    return dictionary;
}