[英]C# Linq JSON nested arrays strange behaviour
我一直在尝试使用 C# Linq Z0ECD11C1D7A287401D148A2F8 库创建嵌套的 arrays 是否有某种原因导致第一种方法不起作用但后一种方法起作用。
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-way”构造它时,会跳过嵌套的 JArray。
它归结为“JArray”的构造函数。
// Linq-way
jo.Add(new JProperty("Nested_failed", new JArray(
new JArray(
new JValue(0),
new JValue(false),
new JValue(21)
)
)
)
);
在上面的第一个示例中,您正在从现有的JArray
JArray
该文档为在这种情况下选择的构造函数提供了以下签名:
public JArray(JArray other)
以及other
,状态:
要从中复制的 JArray object。
所以这会创建一个新的JArray
作为现有 JArray 的副本。 它不会创建嵌套数组。
JArray
上还有其他构造函数会创建一个新构造函数( JArray(Object content)
和JArray(params Object[] content)
),因此您可以通过向(object)
) 添加强制转换来强制代码使用我上面提到的第二个构造函数(object)
:
// Linq-way
jo.Add(new JProperty("Nested_failed", new JArray(
(object)new JArray(
new JValue(0),
new JValue(false),
new JValue(21)
)
)
)
);
您应该稍微更新失败的部分并将嵌套的JArray
传递给外部JArray
的集合初始值设定项
jo.Add(new JProperty("Nested_failed",
new JArray
{
new JArray(new JValue(0), new JValue(false), new JValue(21))
}
));
JArray
ctor接受一个参数,该参数用于从中复制值,而不是用于将其添加为嵌套值
从另一个
JArray
object 初始化JArray
class 的新实例。参数
其他
类型:
Newtonsoft.Json.Linq.JArray
要从中复制的
JArray
object。
添加集合初始化程序后,您将得到以下 output,与第二次尝试相同
"Nested_failed": [
[
0,
false,
21
]
],
"Nested_succeed": [
[
0,
false,
21
]
]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.