从字典对象获取多数组:如何访问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
相关产品推荐
相关产品推荐

