【问题标题】:Dictionary to XML C#字典到 XML C#
【发布时间】:2016-01-28 14:19:48
【问题描述】:

我有一个Dictionary<TKey, TValue>,我希望它使用 Linq 转换成 XML。

<Root>
<Key>TKey1</Key>
<Value>TValue1</Value>
<Key>TKey2</Key>
<Value>TValue2</Value>
<Key>TKey3</Key>
<Value>TValue3</Value>
</Root>

现在我正在使用var xdoc = new XDocument(new XElement("Root", values.Select(entry =&gt; new XElement(entry.Key, entry.Value))));

我得到了

<Root>
<TKey1>TValue1</TKey1>
<TKey2>TValue2</TKey2>
<TKey3>TValue3</TKey3>
</Root>

【问题讨论】:

  • 你需要 Visual Studio 或至少记事本和 C# 编译器
  • 这是一个糟糕的结构,因为如果不考虑它们的顺序性就无法关联键和值节点
  • 我已经编辑了我的问题,请看一下。
  • 您想要的格式不是很好,可能会导致问题,&lt;TKey1&gt;TValue1&lt;/TKey1&gt; 格式有什么问题?我个人更喜欢&lt;key name="TKey1"&gt;TValue1&lt;/key&gt;
  • @AlexK。谢谢!但这是一个要求,所以我问了。

标签: xml linq c#-4.0


【解决方案1】:

正如@Alex 已经提到的,您想要的 xml 的结构并不好,但如果您需要它用于某些遗留系统..

XDocument xdoc = new XDocument(
        new XElement("Root",
            dictionary.SelectMany(kvp => new []
            {
                new XElement("Key", kvp.Key),
                new XElement("Value", kvp.Value)
            })));

示例字典

var dic = new Dictionary<int, string> { [1] = "Bob", [2] = "Mike" };

结果是

<Root>
  <Key>1</Key>
  <Value>Bob</Value>
  <Key>2</Key>
  <Value>Mike</Value>
</Root>

注意:考虑使用一些更好的 xml 结构,它更容易阅读和解析,与字典结构相对应。例如

<Root>
  <Item key="1">Bob</Item>
  <Item key="2">Mike</Item>
</Root>

现在它很容易阅读和操作:

var item = (string)xdoc.XPathSelectElement("//Item[@key=2]"); // "Mike"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 2019-06-09
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多