C#反序列化带items父节点的JSON返回null如何解决
问题根因
反序列化失败返回null的核心原因是 C#定义的类型结构和API返回的JSON结构不匹配:
- API返回的
items节点是用[]包裹的 Item对象数组,但你反序列化时指定的泛型参数是单个Item类型,相当于告诉反序列化程序items字段是一个普通对象,和实际的数组结构冲突。Newtonsoft.Json默认配置下遇到这类结构不匹配问题不会直接抛出异常,只会返回空值,因此你看不到明确报错,只能拿到null结果。 - 你后续直接访问
name.Items.Nombre的写法也不符合数组结构的访问逻辑,即使类型修正后也会报运行错误。
修复步骤
- 修改反序列化时的泛型参数,用集合类型匹配JSON的数组结构
将原来的反序列化代码替换为以下内容,用List<Item>对应JSON里的items数组:string json = await response.Content.ReadAsStringAsync(); // 泛型参数改为List<Item>,匹配items的数组结构 Root<List<Item>> apiResult = JsonConvert.DeserializeObject<Root<List<Item>>>(json); - 调整字段访问逻辑,按集合方式读取数据
Items现在是Item对象的集合,不能直接访问Nombre属性,需要先判空、再读取对应索引的元素属性:if (apiResult?.Items != null && apiResult.Items.Count > 0) { // 示例:读取数组第一个元素的Nombre字段 Console.WriteLine(apiResult.Items[0].Nombre); } - (可选)补全Item类缺失的字段
你当前的Item类没有定义JSON中返回的id字段,Newtonsoft.Json默认会忽略类中不存在的JSON字段,不影响基础反序列化。如果后续需要用到id值,可以在Item类中补充对应属性:public partial class Item { [JsonProperty("id")] public string Id { get; set; } [JsonProperty("nombre")] public string Nombre { get; set; } [JsonProperty("ape")] public string Ape { get; set; } [JsonProperty("email")] public string Email { get; set; } [JsonProperty("pass")] public string Pass { get; set; } [JsonProperty("foto")] public string Foto { get; set; } }
补充说明:你之前反序列化无父节点JSON时运行正常,是因为当时直接匹配的目标类型和JSON结构完全一致;处理带
items父节点的JSON时泛型类型传错,类型结构不匹配才会出现反序列化返回null的问题。
内容的提问来源于stack exchange,提问作者Fran Pino
相关产品推荐
相关产品推荐

