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

ASP.NET Core配置NewtonsoftJson全局序列化设置不生效如何解决?

现有配置的问题

你目前的配置存在3个核心问题,导致MVC管道的入参、返回值序列化未生效:

  • 配置挂载位置错误:AddNewtonsoftJson必须作为AddControllers/AddMvc/AddControllersWithViews的链式调用方法执行,单独向IServiceCollection注册AddNewtonsoftJson不会被MVC的输入/输出格式化器管道识别。
  • 配置逻辑执行时机错误:你将JsonConvert.DefaultSettings的赋值放到了AddNewtonsoftJson的配置委托内部,该委托仅在MVC创建专属序列化器实例时触发,仅能保证你手动调用JsonConvert静态方法时生效,和MVC管道使用的序列化器配置没有直接关联。
  • 绑定源匹配问题:只有标注[FromBody]的参数才会走JSON反序列化流程,[FromQuery]/[FromRoute]等绑定源走的是通用模型绑定逻辑,不会应用JSON序列化配置;如果你的项目同时保留了默认的System.Text.Json格式化器配置,也会因为优先级冲突导致Newtonsoft配置不生效。
修复步骤
  1. 修正配置挂载逻辑,确保AddNewtonsoftJson挂载在控制器注册的链式调用上,同时移除AddNewtonsoftJson委托内部的JsonConvert.DefaultSettings赋值,如需全局静态方法生效可单独在外部配置:
services.AddControllers(options =>
{
    // 可选:移除默认的System.Text.Json格式化器,避免优先级冲突
    options.OutputFormatters.RemoveType<SystemTextJsonOutputFormatter>();
    options.InputFormatters.RemoveType<SystemTextJsonInputFormatter>();
})
.AddNewtonsoftJson(options =>
{
    options.UseMemberCasing();
    options.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat;
    options.SerializerSettings.FloatParseHandling = Newtonsoft.Json.FloatParseHandling.Double;
    options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
    options.SerializerSettings.TraceWriter = new NLogTraceWriter();                    
    options.SerializerSettings.Culture = CultureInfo.InvariantCulture;
});

// 如需手动调用JsonConvert时也生效,单独在此处配置即可
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    DateFormatHandling = Newtonsoft.Json.DateFormatHandling.MicrosoftDateFormat,
    FloatParseHandling = Newtonsoft.Json.FloatParseHandling.Double,
    DateTimeZoneHandling = DateTimeZoneHandling.Utc,
    TraceWriter = new NLogTraceWriter(),
    Culture = CultureInfo.InvariantCulture
};
  1. 确保你已经安装了和项目框架版本匹配的Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet包。
  2. 所有需要走JSON反序列化的入参必须标注[FromBody]属性,返回值如果是IActionResult类型,直接返回Ok(yourObject)即可,不需要手动序列化。
  3. 如果你使用的是ASP.NET Core 6+的最小API(Minimal API),默认不直接支持Newtonsoft.Json序列化,需要额外替换最小API的默认输入输出格式化器,或改用控制器模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:54:01