gpt4 book ai didi

C# Linq JSON 嵌套数组的奇怪行为

转载 作者:行者123 更新时间:2023-12-02 16:40:43 26 4
gpt4 key购买 nike

我一直在尝试使用 C# Linq JSON 库创建嵌套数组。是否有某种原因导致第一种方法不起作用但后来一种方法起作用。

using System;
using Newtonsoft.Json.Linq;

public class Program
{
public static void Main()
{
JObject jo = new JObject();

// Linq-way
jo.Add(new JProperty("Nested_failed", new JArray(
new JArray(
new JValue(0),
new JValue(false),
new JValue(21)
)
)
)
);

// Second try
JArray nested = new JArray();
nested.Add(new JArray(
new JValue(0),
new JValue(false),
new JValue(21)
)
);
jo.Add(new JProperty("Nested_succeed",nested));

Console.WriteLine(jo.ToString());
}
}

结果这个

{
"Nested_failed": [
0,
false,
21
],
"Nested_succeed": [
[
0,
false,
21
]
]
}

据我所知,这两种方式最终应该得到相同的结果。但是由于某种原因,当您以“Linq 方式”构造嵌套 JArray 时,它会被跳过。

最佳答案

它归结为“JArray”的构造函数。

    // Linq-way
jo.Add(new JProperty("Nested_failed", new JArray(
new JArray(
new JValue(0),
new JValue(false),
new JValue(21)
)
)
)
);

在上面的第一个示例中,您从现有的 JArray 创建了一个 JArraydocumentation为在这种情况下选择的构造函数提供以下签名:

public JArray(JArray other)

对于other,声明:

A JArray object to copy from.

因此,这将创建一个新的 JArray 作为现有 JArray 的副本。它不会创建嵌套数组。

other constructorsJArray 上创建一个新的(JArray(Object content)JArray(params Object[] content)),所以你可以强制您的代码通过向 (object) 添加强制转换来使用我上面提到的第二个构造函数:

    // Linq-way
jo.Add(new JProperty("Nested_failed", new JArray(
(object)new JArray(
new JValue(0),
new JValue(false),
new JValue(21)
)
)
)
);

关于C# Linq JSON 嵌套数组的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61747784/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com