如何在C#中使用foreach迭代JsonObject

iszxjhcz  于 2022-12-30  发布在  C#
关注(0)|答案(2)|浏览(310)

我试图通过JsonObject进行foreach,但不幸的是,它给了我一个关于"in productSizes"的错误
foreach语句无法对"JsonNode"类型的变量进行操作,因为"JsonNode"不包含"GetEnumerator"的公共定义
你知道我做错了什么吗?

var productSizes = siteJson["api"]["productDetails"]["getDetails"]["data"]["sizes"];

foreach (var size in productSizes)
{
    Console.WriteLine(size);
    Console.WriteLine();
}
nfs0ujit

nfs0ujit1#

正如您在注解中所发现的,JsonNode有一个.AsArray()方法,该方法在内部使用模式匹配来返回JsonArray。但是,这不是超级安全的,因为如果productSizes没有被反序列化为JsonArray,它将抛出异常。
为了更好的安全性,您最好使用try-catch或者自己实现模式匹配,如下所示:

if (productSizes is JsonArray jArray)
{
    foreach (var size in jArray)
    {
      Console.WriteLine(size);
      Console.WriteLine();
    }
} else {
    Console.WriteLine("Error: productSizes is not an array!");
}
abithluo

abithluo2#

检查productSizes是否为JsonArray并对其进行迭代:

if (productSizes is JsonArray jArr)
{
    foreach (var node in jArr)
    {
        // ...
    }
}

阅读详情:

  1. Type-testing operators and cast expressions
  2. JSON DOM选项

相关问题