使用JSON.Net对JSON进行反序列化,并测试数组的内容

本文关键字:JSON 数组 测试 反序列化 Net 使用 | 更新日期: 2023-09-27 18:20:32

我正在使用JSON.Net取消JSON序列化,这与这个问题的公认解决方案相同:使用JSON.Net将JSON对象反序列化为动态对象。本质上:

dynamic d = JObject.Parse("{number:1000, str:'string', array: [1,2,3,4,5,6]}");
Console.WriteLine(d.number);
Console.WriteLine(d.str);
Console.WriteLine(d.array.Count);

不同的是,我的数组有字符串而不是数字。以上方法效果良好。但是,我想做的是测试数组是否包含特定的值。如果它是一个类型化的字符串数组,我可以使用myArray.IndexOf("ValueToFind"),如果它返回值>-1,那么它就在那里。然而,这不起作用,我认为这是因为它实际上是一个JVM值数组,而不是字符串。

我可以遍历数组,将每个数组强制转换为字符串,然后进行测试(即,foreach循环中包含if语句),但我希望能进行更简洁的单行测试。有人能告诉我们是否有更简单的方法来做测试吗?

感谢

使用JSON.Net对JSON进行反序列化,并测试数组的内容

JSON.NET可以无缝地将JArray转换为List<string>,因此您可以使用

Console.WriteLine(d.array.ToObject<List<string>>().IndexOf("1"));

这甚至适用于JSON整数数组。

我得到了一个稍微混乱的答案,首先将您的动态数组转换为已知类型:

IEnumerable<JToken> d2 = d.array;

然后可以使用Any作为扩展方法。

if (d2.Any(p => p.ToString() == "1")) //etc.