JsonConvert列表中没有返回我正在寻找的内容

时间:2017-02-08 14:54:06

标签: c# json.net

我有一个.NET 4.5应用程序。目前我正在编写一个列表,该列表输出到XML文件:

List<string[]> list = new List<string[]> { };

list.Add(new string[] { "text1", "this is text 1" });
list.Add(new string[] { "text2", "this is text 2" });
list.Add(new string[] { "text3", "this is text 3" });
list.Add(new string[] { "text4", "this is text 4" });

using (XmlWriter writer = XmlWriter.Create("output.xml"))
{
    writer.WriteStartDocument();
    writer.WriteStartElement("texts");

    foreach (string[] item in list)
    {
        writer.WriteElementString(item[0], item[1]);
    }

    writer.WriteEndElement();
    writer.WriteEndDocument();
}

此输出返回如下:

<?xml version="1.0" encoding="utf-8"?>
<texts>
    <text1>this is text 1</text1>
    <text2>this is text 2</text2>
    <text3>this is text 3</text3>
    <text4>this is text 4</text4>
</texts>

在此列表中运行JsonConvert.SerializeObject()将返回以下内容:

[
    ["text1", "this is text 1"],
    ["text2", "this is text 2"],
    ["text3", "this is text 3"],
    ["text4", "this is text 4"]
]

当然,这不是那么有用。更有用的是:

{
  "text1": "this is text 1",
  "text2": "this is text 2",
  "text3": "this is text 3",
  "text4": "this is text 4"
}

完成这项工作的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

最简单的方法:JsonConvert.SerializeObject(list.ToDictionary(p => p[0], p => p[1]))

或者您可以编写自己的自定义JsonConverter

UPD :正如@Equalsk指出的那样,只有当字符串数组中的第一项是唯一的(text1,text2等)时,此代码(没有自定义转换器)才会起作用

答案 1 :(得分:0)

您可以使用词典而不是列表来获取结果。如果只有键值对,请使用Dictionary。如果你有更多,你可以使用元组。如果没有将它包起来并编写自己的自定义转换器。