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

使用Newtonsoft反序列化JSON后得到空属性员工列表的问题

嗨,我来帮你搞定这个Newtonsoft反序列化的问题!

问题出在哪?

核心原因就是你的JSON结构和你要反序列化的类型不匹配:

  • 你提供的JSON最外层是一个数组,里面只有一个对象,这个对象的employees属性才是真正的员工列表;
  • 但你直接把整个JSON反序列化成List<employee>,Newtonsoft找不到对应employee类的结构,只能生成一个默认的空对象(所以firstName和lastName都是null)。
两种解决办法任你选

办法1:给JSON结构配个“根类”

先定义一个和JSON最外层结构匹配的类,用来包裹员工列表:

public class RootObject
{
    public List<employee> employees { get; set; }
}

然后修改你的反序列化代码,先拿到根对象列表,再提取里面的员工数据:

IList<employee> employees = new List<employee>();
string json = default(string);
using (StreamReader r = new StreamReader("Database.json"))
{
    json = r.ReadToEnd();
}
// 先把JSON转成根对象的列表
var rootList = JsonConvert.DeserializeObject<List<RootObject>>(json);
// 取出第一个根对象里的员工列表(你的JSON里只有一个根对象)
employees = rootList.FirstOrDefault()?.employees ?? new List<employee>();

办法2:直接定位到员工数组(不用新增类)

如果不想额外加类,也可以用Newtonsoft的JObject/JArray直接解析,精准拿到employees数组:

IList<employee> employees = new List<employee>();
string json = default(string);
using (StreamReader r = new StreamReader("Database.json"))
{
    json = r.ReadToEnd();
}
// 先把JSON解析成数组
var jsonArray = JArray.Parse(json);
// 定位到第一个对象里的employees字段
var employeesJson = jsonArray[0]["employees"];
// 把这个字段转成员工列表
employees = employeesJson.ToObject<List<employee>>();
额外提个小建议

按照C#的命名规范,类名和属性名最好用帕斯卡命名法(比如Employee代替employee,FirstName代替firstName),要是想和JSON里的小驼峰字段匹配,加个[JsonProperty]特性就行:

public class Employee
{
    [JsonProperty("firstName")]
    public string FirstName { get; set; }
    [JsonProperty("lastName")]
    public string LastName { get; set; }
}

这样既符合规范,又能完美匹配JSON字段~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:54:55