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

Visual Studio粘贴JSON为类后,JsonSerializer反序列化元素为空求助

问题分析与解决

问题场景

API返回的JSON结构是一个直接包含用户对象的数组:

[
  {
    "firstName": "Bill",
    "lastName": "Gates",
    "email": "bill.gates@microsoft.com"
  },
  {
    "firstName": "Steve",
    "lastName": "Balmer",
    "email": "steve.balmer@microsoft.com"
  }
]

通过Visual Studio 2022的“Paste JSON as Classes”生成了如下类:

public class Rootobject
{
    public Class1[] Property1 { get; set; }
}

public class Class1
{
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string email { get; set; }
}

执行测试代码后,得到的employees数组包含2个元素,但每个元素的属性全为null:

string sJSON = @"[{""firstName"":""Bill"",""lastName"":""Gates"",""email"":""bill.gates@microsoft.com""},{""firstName"":""Steve"",""lastName"":""Balmer"",""email"":""steve.balmer@microsoft.com""}]";

Rootobject[] employees = JsonSerializer.Deserialize<Rootobject[]>(sJSON);

错误原因

  1. 类结构与JSON不匹配:VS的“Paste JSON as Classes”工具误判了JSON结构,给原本是数组的外层多套了一层Rootobject包装类,但实际返回的JSON本身就是一个Class1类型的数组,并不存在Property1这个层级。
  2. 反序列化类型错误:你尝试把JSON数组反序列化为Rootobject[],但JSON里的每个元素是Class1对象,不是Rootobject,序列化工具无法匹配属性,导致每个Rootobject实例的Property1为null。

解决方法

方法一:调整类结构,去掉多余的Rootobject

直接使用Class1(建议重命名为更有意义的Employee)作为数组元素类型:

// 重命名Class1为Employee,提升可读性
public class Employee
{
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string email { get; set; }
}

然后修改反序列化代码:

string sJSON = @"[{""firstName"":""Bill"",""lastName"":""Gates"",""email"":""bill.gates@microsoft.com""},{""firstName"":""Steve"",""lastName"":""Balmer"",""email"":""steve.balmer@microsoft.com""}]";

Employee[] employees = JsonSerializer.Deserialize<Employee[]>(sJSON);

方法二:如果保留原类结构,需修改JSON匹配(不推荐)

如果一定要使用生成的Rootobject类,那JSON结构应该是包含Property1字段的对象,而非直接数组,但这不符合当前API返回的结构,所以不推荐这种方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:39:54