You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何从反序列化JSON对象的数组中获取值

解决JsonObject中数组数据的读取问题

别着急,你能成功读取ok字段说明基础的反序列化是没问题的,问题出在处理JSON数组的方式上——直接foreach遍历JsonObject本身只会遍历它的键值对(比如ok和establishments这两个键),而不是数组里的元素。咱们来一步步修正:

先搞清楚你用的JSON库

常见的两种处理方式,对应不同的库,你可以根据自己的情况选:

情况1:使用.NET内置的System.Text.Json

如果你是用JsonSerializer.Deserialize<JsonObject>(jsonString)得到的JsonObject,那需要先把establishments字段转换成JsonArray再遍历:

// 假设jsonString是你从API拿到的原始数据
JsonObject obj = JsonSerializer.Deserialize<JsonObject>(jsonString);

// 先确认establishments字段存在且是数组类型
if (obj.TryGetProperty("establishments", out JsonElement establishmentsElem) 
    && establishmentsElem.ValueKind == JsonValueKind.Array)
{
    // 遍历数组里的每个商家对象
    foreach (JsonElement item in establishmentsElem.EnumerateArray())
    {
        // 读取name字段,记得做存在性检查避免报错
        if (item.TryGetProperty("name", out JsonElement nameElem))
        {
            string shopName = nameElem.GetString();
            // 这里就可以用shopName做你需要的操作了,比如打印或者存到集合里
            Console.WriteLine(shopName);
        }
    }
}

情况2:使用Newtonsoft.Json(Json.NET)

如果是用JObject.Parse(jsonString)得到的JObject,处理起来更简洁:

JObject obj = JObject.Parse(jsonString);
JArray establishments = (JArray)obj["establishments"];

foreach (JObject shop in establishments)
{
    // 直接读取name字段,也可以用shop["name"]?.ToString()避免空引用
    string shopName = (string)shop["name"];
    Console.WriteLine(shopName);
}

为什么之前的foreach失败?

你之前可能直接写了foreach (var item in obj),这种写法遍历的是JsonObject的键值对集合,也就是会拿到"ok": true和"establishments": [...]这两个条目,而不是数组里的每个商家对象。必须先定位到数组字段,再遍历数组内部的元素才行。

内容的提问来源于stack exchange,提问作者JeroenM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:06:49