使用Json.Net反序列化JSON并测试数组的内容

时间:2014-09-02 14:36:10

标签: c# json.net

我使用JSON.Net对JSON进行反序列化,与此问题的可接受解决方案相同:Deserialize json object into dynamic object using Json.net。基本上:

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然后就在那里。但是,这不起作用,我认为这是因为它实际上是一个JValues数组而不是字符串。

我可以遍历数组,将每个数组转换为字符串,然后进行测试(即带有if语句的foreach循环),但我希望进行更简洁的单行测试。任何人都可以建议是否有更简单的方法进行测试?

谢谢

2 个答案:

答案 0 :(得分:1)

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

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

即使使用JSON整数数组也可以。

答案 1 :(得分:1)

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

IEnumerable<JToken> d2 = d.array;

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

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