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

.NET Core 5控制器返回空对象数组的原因及错误排查

.NET Core 5控制器返回空对象数组的原因及解决

核心原因

.NET Core 5默认使用System.Text.Json作为API的JSON序列化器,而你手动调用的JsonConvert.SerializeObject属于Newtonsoft.Json(Json.NET),两者的序列化规则存在差异,导致同一对象在两种方式下输出结果不同。

具体可能的错误点

  • SalesPersonDto属性配置不符合System.Text.Json要求:System.Text.Json默认只序列化public且带有公共getter的属性。如果你的SalesPersonDto中Id、Name、PhoneNo、Type这些属性是private/internal,或者只有setter没有getter,System.Text.Json会直接忽略这些属性,最终输出空对象数组。而Newtonsoft.Json的序列化规则更宽松,在这类场景下仍能正确序列化属性。
  • 特性兼容性问题:如果给Dto属性添加了Newtonsoft专属的特性(如[JsonProperty]),但未配置对应System.Text.Json的特性(如[JsonPropertyName]),System.Text.Json无法识别这些特性,会导致属性不被序列化。

解决方法

  1. 修正SalesPersonDto的属性定义:确保需要序列化的属性都是public且带有公共getter:

    public class SalesPersonDto
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public string PhoneNo { get; set; }
        public string Type { get; set; }
    }
    
  2. 配置System.Text.Json序列化规则:如果想继续使用默认的System.Text.Json,可以在Startup.cs中调整序列化选项,匹配需求:

    services.AddControllers()
            .AddJsonOptions(options =>
            {
                // 关闭默认驼峰命名,保持属性原命名风格
                options.JsonSerializerOptions.PropertyNamingPolicy = null;
                // 如需序列化字段(非属性),可开启此选项(不推荐)
                // options.JsonSerializerOptions.IncludeFields = true;
            });
    
  3. 全局替换为Newtonsoft.Json:如果习惯使用Newtonsoft.Json的规则,可以将其设为API默认序列化器,无需每次手动调用JsonConvert:

    services.AddControllers()
            .AddNewtonsoftJson();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:36:29