我使用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循环),但我希望进行更简洁的单行测试。任何人都可以建议是否有更简单的方法进行测试?
谢谢
答案 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.