JSON.NET -编写一个带有两组括号的嵌套列表

3phpmpom  于 2023-04-22  发布在  .NET
关注(0)|答案(2)|浏览(91)

我有一个Windows Forms .NET应用程序,我正在使用Newtonsoft JSON.NET库将JSON格式的文本写入文本文件。我想写两组括号来表示points是一个列表列表,即使它只包含一个列表(如下所示)。

{
    "rallyPoints:" {
        "points": [
            [
                0.0,
                1.0,
                2.0
            ]
        ]
    }
}

下面是我的代码:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.IO;

void exampleFunction()
{
    string filePath = @"path/to/file.json";
    List<List<double>> rallyPoints = new List<List<double>>();
    List<double> singleRallyPoint = new List<double>
    {
        0.0, 1.0, 2.0
    };
    rallyPoints.Add(singleRallyPoint);

    JObject mainObject = new JObject(
        new JProperty("rallyPoints", new JObject(
        new JProperty("points", rallyPoints)
        ))
    );

    using (StreamWriter file = File.CreateText(filePath))
    using (JsonTextWriter writer = new JsonTextWriter(file))
    {
        writer.Formatting = Formatting.Indented;
        mainObject.WriteTo(writer);
    }
}

我的代码如下所示写入文本文件。请注意,points字段只有一组方括号,而不是两组,因此不清楚这是一个列表的列表。

{
    "rallyPoints:" {
        "points": [
            0.0,
            1.0,
            2.0
        ]
    }
}

我不确定我正在尝试完成的是一个正确的JSON格式。也许是这样的情况,JSON的列表列表只包含一个列表作为一个元素被格式化为一个列表。我还没有能够在网上验证到目前为止。即使我正在尝试的不是正确的JSON,我仍然想知道是否有一个解决方案。谢谢。

wfveoks0

wfveoks01#

List<List<double>>转换为JArray应该可以解决这个问题。

JArray.FromObject(rallyPoints)
JObject mainObject = new JObject(
    new JProperty("rallyPoints", 
        new JObject(
            new JProperty("points", JArray.FromObject(rallyPoints))
        )
    )
);
brgchamk

brgchamk2#

最简单的方法是使用匿名类型

void exampleFunction()
{
    string filePath = @"path/to/file.json";

    var result = new
    {
        rallyPoinst = new
        {
            points = new List<List<double>> {
                     new List<double> {
                        0.0, 1.0, 2.0
                     }}
        }
    };

    var json=JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented);
    File.WriteAllText(filePath, json);
}

相关问题