0

我想使用 System.Json.JsonArray.Contains() 来查看我的 Array 是否包含特定值。下面是一个最小的例子。我希望变量 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?

4

2 回答 2

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();
于 2019-06-27T23:49:24.813 回答
1

JsonArray.Contains() 在这里内部执行 List.Contains ,因此在这种情况下,它实际上将执行参考比较,这意味着您需要将 JsonPrimitive 的实际实例传递给它,该实例已经在您正在寻找的数组中。采用 JsonValue 的所有其他 JsonArray 方法也是如此。对您的用例不是很有用。

API 一般看起来有点笨拙,没有经过深思熟虑,Stephen Toub 实际上在 1 月份的这个提交消息中将它称为“遗留 System.Json 库”,所以我猜这个库已被微软弃用,转而支持 JSON。 NET,我同意 Seth 的观点,你最好使用它。

如果你仍然想坚持下去,Seth 的使用 Select() 的解决方案可能是要走的路。

于 2019-07-09T22:46:44.887 回答