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

ASP.NET Core WebController未返回公共字段问题求助

解决ASP.NET Core WebController返回DTO公共字段为空的问题

问题原因

ASP.NET Core 默认使用 System.Text.Json 作为JSON序列化器,它默认不序列化公共字段,只处理公共属性;而旧版ASP.NET(MVC/Web API)默认使用的是 Newtonsoft.Json(Json.NET),后者天然支持序列化公共字段,这就是迁移后客户端收到空JSON的核心原因。

解决方案

不需要修改大量DTO类,通过配置即可解决,以下两种方案任选其一:

方案1:配置System.Text.Json序列化公共字段

在 Program.cs(.NET 6+ 顶级语句模式)中,修改控制器服务的JSON序列化配置,开启字段序列化:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 启用公共字段序列化
        options.JsonSerializerOptions.IncludeFields = true;
        // 如果DTO中有只读公共字段需要序列化,取消下面注释
        // options.JsonSerializerOptions.IncludeReadOnlyFields = true;
    });

方案2:切换回Newtonsoft.Json(Json.NET)

如果希望和旧版ASP.NET的序列化行为完全一致,可以切换回Json.NET:

  1. 安装NuGet包:Microsoft.AspNetCore.Mvc.NewtonsoftJson
  2. 在 Program.cs 中配置使用Json.NET:
builder.Services.AddControllers()
    .AddNewtonsoftJson();

Json.NET默认会序列化公共字段,无需额外配置,和旧版行为完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:35:20