C#使用HttpClient反序列化JSON响应:如何筛选指定键值
问题:无法从TMDB API的JSON中获取指定国家的分级信息
你当前的代码无法获取到目标数据,核心问题是没有正确匹配JSON的嵌套层级结构。
错误分析
API返回的JSON结构中:
iso_3166_1是results数组中每个对象的字段,而非根对象字段certification又嵌套在每个国家对象的release_dates数组中
你直接从根对象dynamicObject读取certification和iso_3166_1,这两个字段根本不存在于根层级,自然返回null。
修正后的代码
public static async Task getHttpApi() { try { using (var client = new HttpClient()) { client.BaseAddress = new Uri("https://api.themoviedb.org/3/movie/54597/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage response = await client.GetAsync("release_dates?api_key=key"); if (response.IsSuccessStatusCode) { using (HttpContent content = response.Content) { string result = await content.ReadAsStringAsync(); var dynamicObject = JsonConvert.DeserializeObject<dynamic>(result)!; // 遍历results数组,找到US对应的项 foreach (var countryItem in dynamicObject.results) { if (countryItem.iso_3166_1 == "US") { // 从release_dates数组中取第一个元素的certification var rating = countryItem.release_dates[0].certification; Console.WriteLine(rating); break; // 找到后退出循环 } } } } else { Console.WriteLine("Error"); } } } catch (Exception err) { throw err; } }
代码说明
- 先访问根对象下的
results数组,这是所有国家数据的容器 - 遍历数组中的每个国家对象,匹配
iso_3166_1为"US"的项 - 从匹配到的国家对象中,取出
release_dates数组的第一个元素(如果有多个分级记录,可根据type字段筛选),读取其certification值
内容的提问来源于stack exchange,提问作者ronniej962
相关产品推荐
相关产品推荐

