无法加载MvcJsonOptions:NuGet包版本与报错版本不一致求助
问题原因
MvcJsonOptions类型在ASP.NET Core 3.0及后续版本中已被移除,替换为JsonOptions;同时Microsoft.AspNetCore.Mvc.Formatters.Json包在ASP.NET Core 3.0+版本中已不再需要——框架已内置System.Text.Json作为默认JSON处理组件。你的项目目标框架大概率是.NET 8(对应ASP.NET Core 8),但引用了仅适用于ASP.NET Core 2.x的旧版本包,导致版本依赖冲突,系统尝试加载与框架匹配的8.0.0.0版本程序集,但该版本中已不存在MvcJsonOptions类型。
解决步骤
检查并确认项目目标框架
右键项目→属性,查看目标框架是否为.NET 8(或3.0+)。如果是,旧版本的Microsoft.AspNetCore.Mvc.Formatters.Json包与当前框架不兼容,必须移除。卸载旧版本NuGet包
在NuGet包管理器中找到Microsoft.AspNetCore.Mvc.Formatters.Json(版本2.1.18),点击卸载并保存更改;也可以通过Package Manager Console执行命令:Uninstall-Package Microsoft.AspNetCore.Mvc.Formatters.Json替换配置代码
将原来使用MvcJsonOptions的配置代码替换为JsonOptions:
原ASP.NET Core 2.x代码示例:services.AddMvc() .AddJsonOptions(options => { // 原MvcJsonOptions配置,比如: options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); });替换为ASP.NET Core 3.0+兼容代码(如果需要继续使用Newtonsoft.Json,需额外安装
Microsoft.AspNetCore.Mvc.NewtonsoftJson包):// 使用框架默认的System.Text.Json services.AddControllersWithViews() .AddJsonOptions(options => { // 配置JsonSerializerOptions,比如保持属性名不变: options.JsonSerializerOptions.PropertyNamingPolicy = null; }); // 如果需要继续使用Newtonsoft.Json(Json.NET) services.AddControllersWithViews() .AddNewtonsoftJson(options => { // 配置Newtonsoft.Json选项,比如: options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); });清理并重建项目
删除项目目录下的bin和obj文件夹,在Visual Studio中执行清理解决方案→生成解决方案,清除旧版本编译残留文件。检查其他依赖版本一致性
确保项目中所有ASP.NET Core相关的NuGet包版本与目标框架版本匹配(比如.NET 8对应8.0.x版本),避免跨版本依赖导致的冲突。
内容的提问来源于stack exchange,提问作者Sibin

