JSON反序列化时构造函数参数全为null问题求助
问题分析与解决方案
我帮你排查了几个关键问题,这就是导致反序列化失败、所有参数为null的核心原因:
1. 自定义构造函数的参数不兼容
你标记了[JsonConstructor]的构造函数要求必须传入children参数,但第一个JSON里并没有这个字段,JSON序列化库找不到匹配的构造函数,就会生成一个默认实例(所有字段为null)。另外,构造函数里的rolePermission参数用了string类型,虽然你手动做了int转换,但JSON库本身可以自动处理字符串转int的逻辑,多这一步反而容易引发类型匹配问题。
2. Children的类型与JSON结构不匹配
你的Page类里children定义为Page[]数组,但你提供的带children的JSON里,children是一个嵌套的对象({"page": {...}}),而非数组格式,类型完全不兼容,反序列化自然失败。
3. 缺少无参构造函数(兼容性问题)
多数JSON序列化库(比如Newtonsoft.Json)会优先使用自定义构造函数,但如果构造函数参数无法完全匹配JSON字段,就会出现实例化异常或空值问题。
修复后的Page类代码
using Newtonsoft.Json; public class Page { public int RolePermission { get; set; } public string Icon { get; set; } public string Title { get; set; } public string Url { get; set; } [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] public Page[] Children { get; set; } // 给children参数添加默认值,适配无此字段的JSON [JsonConstructor] public Page(int rolePermission, string icon, string title, string url, Page[] children = null) { RolePermission = rolePermission; Icon = icon; Title = title; Url = url; Children = children; } // 可选:添加无参构造函数,提升序列化库的兼容性 public Page() {} }
正确的JSON格式示例
无children的JSON
{ "page": { "rolePermission":"2", "icon":"dashboard", "title":"Dashboard", "url":"Dashboard" } }
带children的JSON(注意children是数组格式)
{ "page": { "rolePermission":"2", "icon":"dashboard", "title":"Dashboard", "url":"Dashboard", "children": [ { "rolePermission":"2", "icon":"dashboard", "title":"Dashboard", "url":"Dashboard" } ] } }
额外说明
- 我把字段名改成了C#规范的帕斯卡命名法,Newtonsoft.Json默认会自动映射JSON的小驼峰命名,无需额外配置。
- 如果你的业务场景中
children确实是嵌套的{"page": {...}}结构,那需要把Children字段改成Page类型(而非数组),或者调整JSON结构为数组,具体取决于你的需求。
内容的提问来源于stack exchange,提问作者Mr.Deer
相关产品推荐
相关产品推荐

