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

从字典对象获取多数组:如何访问JSON返回的results数组数据

如何借助实体类正确提取并访问JSON中的results数组数据?

之前通过HttpWebRequest获取JSON数据后,用JavaScriptSerializer反序列化为Dictionary<string, object>,取出results数组时直接遍历输出只能得到System.Collections.Generic.Dictionary'2[System.String,System.Object]这类类型信息,无法获取实际数据。现在已定义匹配JSON结构的Result和Root实体类,可通过以下方式正确提取并访问数据:

步骤1:直接反序列化为实体类

不再使用Dictionary<string, object>,直接将JSON响应反序列化为Root类型,results会自动映射为List<Result>,每个元素都是强类型的Result对象,可直接访问属性。

步骤2:修改请求与反序列化代码

替换原反序列化逻辑,完整代码如下:

HttpWebRequest apiRequest = WebRequest.Create(url) as HttpWebRequest;

string apiResponse = "";
using (HttpWebResponse response = apiRequest.GetResponse() as HttpWebResponse)
{
    StreamReader reader = new StreamReader(response.GetResponseStream());
    apiResponse = reader.ReadToEnd();
}

// 直接反序列化为Root实体类
var root = new JavaScriptSerializer().Deserialize<Root>(apiResponse);
var resultsList = root.results; // 得到List<Result>类型的集合

步骤3:访问results数组中的数据

resultsList是List<Result>类型,可通过索引直接访问元素属性,也可遍历输出:

// 通过索引访问单个元素
var firstResult = resultsList[0];
string firstTitle = firstResult.title;
int firstId = firstResult.id;

// 遍历所有结果并拼接信息
StringBuilder builder = new StringBuilder();
foreach (var result in resultsList)
{
    if (builder.Length > 0)
    {
        builder.Append(", ");
    }
    // 直接访问实体类属性获取实际数据
    builder.Append($"标题:{result.title},ID:{result.id}");
}
LblTitle.Text = builder.ToString();

原方式无效的原因

之前将results强制转为ArrayList后,每个元素都是Dictionary<string, object>类型,直接调用Append(current)会输出对象的类型名称而非实际数据。使用实体类后,每个元素都是强类型的Result实例,能直接访问对应属性获取具体值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:05:25