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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 20:25:02