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

.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 17:36:05