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

如何使用Newtonsoft.Json正确反序列化数组中的嵌套对象(解决字段为空问题)

问题根源:JSON结构与实体类映射不匹配

你遇到的问题核心是JSON里的links数组元素结构和你的NavigationLink类不对应。仔细看你的JSON:

"links": [{ 
  "navigationlink": { 
    "name": "Index.", 
    "url": "/" 
  } 
}]

每个links元素并不是直接包含name和url的对象,而是被一个名为navigationlink的外层属性包裹的对象。但你的NavigationLink类直接声明了name和url字段,反序列化器找不到对应的映射关系,自然会把这两个值设为null。


解决方案:调整实体类匹配JSON结构

有两种简单的修复方式,选哪种都可以:

方式1:新增包装类适配层级

创建一个专门的包装类来对应links数组里的外层结构,再嵌套你的NavigationLink类:

public class NavigationLinks 
{ 
    [JsonProperty("links")] 
    // 把数组类型改成包装类数组
    public NavigationLinkWrapper[] Links { get; set; } 
}
public class NavigationLinkWrapper
{
    [JsonProperty("navigationlink")]
    public NavigationLink NavigationLink { get; set; }
}

你的原NavigationLink.cs可以保持不变,之后解析时就能通过Links[i].NavigationLink.Name和Links[i].NavigationLink.Url拿到对应值了。

方式2:直接修改NavigationLink类适配层级

如果你不想新增类,也可以直接调整NavigationLink的结构来匹配JSON:

public class NavigationLink 
{ 
    [JsonProperty("navigationlink")]
    public NavigationLinkDetails Details { get; set; }
}

public class NavigationLinkDetails
{
    [JsonProperty("name")] 
    public string Name { get; set; } 
    [JsonProperty("url")] 
    public string Url { get; set; } 
}

这种方式下,解析后需要通过Links[i].Details.Name来访问数据。


验证修复效果

修改完实体类后,再用你原来的两种解析方式试试:

  • HttpRespondeMessage.Content.ReadAsJsonAsync<HomeData>()
  • JsonConvert.DeserializeAnonymousType(jsonString, new HomeData())

这时候links数组里的name和url就能正确被反序列化出来了,不会再是null。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 23:37:31