.NET Core 3.1中IOptions<MvcJsonOptions>报错的替代方案是什么?
问题根因
.NET Core 3.0及以上版本默认将ASP.NET Core内置的JSON序列化组件从Newtonsoft.Json(Json.NET)替换为System.Text.Json,原2.2版本中属于Newtonsoft.Json适配包的MvcJsonOptions已被默认移除,因此会报找不到类型的错误。
解决方案
你可以根据项目需求选择以下两种适配方案:
方案1:继续沿用Newtonsoft.Json(迁移成本最低,推荐旧项目使用)
- 第一步:安装匹配3.1版本的NuGet包
Microsoft.AspNetCore.Mvc.NewtonsoftJson - 第二步:在
Startup.cs的ConfigureServices方法中注册Newtonsoft.Json配置:
services.AddControllers() // 注册Newtonsoft.Json作为序列化组件,原有配置可在此处统一设置 .AddNewtonsoftJson(options => { // 示例:配置日期格式化规则,原有SerializerSettings的配置都可以在这里写 options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; });
- 第三步:修改你原有代码的注入类型,将
IOptions<MvcJsonOptions>替换为IOptions<MvcNewtonsoftJsonOptions>即可:
public JsonDeserialiser(IOptions<MvcNewtonsoftJsonOptions> options) : this(options.Value.SerializerSettings) { }
该方案几乎不需要修改原有和Newtonsoft.Json绑定的业务逻辑,兼容性最好。
方案2:切换使用原生System.Text.Json(无第三方依赖,性能更高)
如果你的项目愿意调整序列化相关逻辑适配原生组件,可以选择该方案:
- 不需要额外安装NuGet包,直接将注入类型替换为
IOptions<JsonOptions>即可,对应序列化配置属性为JsonSerializerOptions:
using Microsoft.AspNetCore.Mvc; using System.Text.Json; public JsonDeserialiser(IOptions<JsonOptions> options) : this(options.Value.JsonSerializerOptions) { }
注意:System.Text.Json的API和Newtonsoft.Json存在差异,你需要同步调整JsonDeserialiser的实现逻辑适配原生序列化规则。
内容的提问来源于stack exchange,提问作者RjLearn
相关产品推荐
相关产品推荐

