Controller已有数据却返回空JSON的问题排查求助
排查接口返回空JSON但对象有数据的问题
检查MyClass的属性访问修饰符
JSON序列化器(如System.Text.Json、Newtonsoft.Json)默认只序列化**公共(public)**的属性或字段。如果你的MyClass属性是private/protected/internal,序列化器会直接忽略,导致返回空JSON。
错误示例:class MyClass { int ItemId { get; set; } string ItemName { get; set; } }修复:将属性改为public:
public class MyClass { public int ItemId { get; set; } public string ItemName { get; set; } }确保属性有公共的getter
即使属性是public,但仅定义了setter没有getter,序列化器无法读取属性值,同样会返回空JSON。
错误示例:public class MyClass { public int ItemId { set; } }修复:添加公共getter:
public int ItemId { get; set; }检查JSON序列化配置
项目中可能配置了特殊的序列化规则,导致属性被忽略。比如在ASP.NET Core的Program.cs/Startup.cs中:builder.Services.AddControllers() .AddJsonOptions(options => { // 若开启此设置,会忽略只读属性 options.JsonSerializerOptions.IgnoreReadOnlyProperties = true; // 若未开启此设置,字段不会被序列化(默认只序列化属性) options.JsonSerializerOptions.IncludeFields = false; });修复:根据需求调整配置,确保需要序列化的成员被包含。
排查循环引用问题
如果MyClass对象内部存在循环引用(如A对象引用B,B对象又引用A),部分序列化配置下会静默失败,返回空JSON而非抛出异常。
修复:在序列化配置中开启循环引用处理:
// System.Text.Json 配置options.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles;// Newtonsoft.Json 配置
JsonSerializerSettings settings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
内容的提问来源于stack exchange,提问作者Bohn
相关产品推荐
相关产品推荐

