c# - 如何通过 LINQ to XML 创建 Dictionary<int, string>?

标签 c# dictionary linq-to-xml

我有以下 XML:

<FootNotes>
  <Line id="10306" reference="*"></Line>
  <Line id="10308" reference="**"></Line>
  <Line id="10309" reference="***"></Line>
  <Line id="10310" reference="****"></Line>
  <Line id="10311" reference="+"></Line>
</FootNotes>

我有以下代码,我可以在其中获得 Dictionary<int, string>()物体进入

myObject.FootNotes 

这样每一行都是一个键/值对

var doc = XElement.Parse(xmlString);

var myObject = new
  {
      FootNotes = (from fn in doc
                       .Elements("FootNotes")
                       .Elements("Line")
                       .ToDictionary
                       (
                       column => (int) column.Attribute("id"),
                       column => (string) column.Attribute("reference")
                       )
                  )
  };

虽然我不确定如何将它从 XML 获取到对象中。谁能提出解决方案?

最佳答案

您的代码几乎是正确的。试试这种细微的变化:

FootNotes = (from fn in doc.Elements("FootNotes")
                           .Elements("Line")
             select fn).ToDictionary(
                 column => (int)column.Attribute("id"),
                 column => (string)column.Attribute("reference")
             )

我不认为冗长的 from ... select 语法在这里真的有多大帮助。我会改用这个稍微简单一些的代码:

Footnotes = doc.Descendants("Line").ToDictionary(
                e => (int)e.Attribute("id"),
                e => (string)e.Attribute("reference")
            )

但是您在示例代码中使用的是匿名类型。如果您打算将此对象返回给调用者,则需要使用具体类型。

var myObject = new SomeConcreteType
    {
        Footnotes = ....
    };

关于c# - 如何通过 LINQ to XML 创建 Dictionary<int, string>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2828336/

相关文章:

c# - 使用 Converter 时未注册 CollectionChanged 事件?

c# - Protobuf-Net 的实现可以击败我目前拥有的吗?

python - Pandas :用字典的字典中的值填充 NaN 值

java - 如何实现具有条目自动过期功能的CacheMap?

c++ - 如何在 map 和 unordered_map 之间进行选择?

c# - 为什么此 Linq to XML 查询不起作用

c# - 存储库模式 - 切换出数据库并切换到 XML 文件

c# - MVVM:从头到尾的教程?

c# - 使用逻辑运算符的 SQL 搜索

c# - 在 LINQ 中只设置一个命名空间