我想使用System.Json.JsonArray.Contains()来查看我的Array是否包含特定值。下面是一个最小的示例。我希望varibales bar和baz均为true
,但它们都是false
。
nuget包使用了System.Json v4.5。
using System;
using System.Json;
public class Program
{
public static void Main()
{
bool bar = ((JsonArray)JsonValue.Parse("{\"foo\": [1,2,3]}")["foo"]).Contains(2);
bool baz = ((JsonArray)JsonValue.Parse("{\"foo\": [1,2,3]}")["foo"]).Contains(new JsonPrimitive(2));
Console.WriteLine($"contains 2?: {bar} {baz}");
Console.ReadKey();
}
}
使用System.Json,如何检查数组是否包含数值,以及为什么上面的示例返回false?
答案 0 :(得分:2)
我以前从未使用过System.Json,但似乎可能是类型错误(将int与JsonValue进行比较)。 您可以在检查之前将值转换为int,这应该可以工作。 这是使用linq的示例。
bool bar = ((JsonArray)JsonValue.Parse("{\"foo\": [1,2,3]}")["foo"]).Select(a=>(int)a).Contains(2);
Console.WriteLine($"contains 2?: {bar}");
Console.ReadKey();
答案 1 :(得分:1)
JsonArray.Contains()内部执行一个List.Contains here,因此在这种情况下,它实际上将执行引用比较,这意味着您需要将已经存在于数组中的JsonPrimitive实际实例传递给它。您正在寻找。对于采用JsonValue的JsonArray的所有其他方法,也是如此。对于您的用例来说不是很有用。
一般来说,该API似乎有点笨拙,没有经过深思熟虑,Stephen Toub实际上从1月份起将其称为this commit message中的“旧版System.Json库”,因此我猜想该库已被Microsoft弃用。支持JSON.NET,我同意Seth的话,最好使用它。
如果您仍然想坚持使用它,那么使用Select()Seth's solution可能是可行的方法。