.NET Core 3.1中如何解决“无法加载类型'Microsoft.AspNetCore.Mvc.MvcJsonOptions'”错误?
解决.NET Core 3.1中无法加载
Microsoft.AspNetCore.Mvc.MvcJsonOptions的问题 嘿,这个问题我熟——本质是ASP.NET Core 3.0及以后的版本彻底移除了MvcJsonOptions这个类型,同时JSON格式化的实现方式也做了调整。结合你的csproj代码,咱们一步步修正:
第一步:修复项目依赖包的兼容性
你的项目里有几个和.NET Core 3.1不匹配的包,先调整它们:
- 删掉
Microsoft.AspNetCore.Cors2.2.0:.NET Core 3.1的Microsoft.AspNetCore.App框架已经内置了CORS功能,旧版本的独立包会和框架引用冲突。 - 升级Swashbuckle相关包:你用的
SwashBuckle.AspNetCore.SwaggerUI5.0.0虽然能跑,但换成兼容3.1的稳定版本(比如5.6.3)会更稳妥,同时建议补充SwashBuckle.AspNetCore.Swagger包保证Swagger功能完整。
修改后的csproj代码应该是这样:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> <RootNamespace>Insurance_Customer_Portal_API</RootNamespace> <AddRazorSupportForMvc>true</AddRazorSupportForMvc> </PropertyGroup> <ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="4.1.1" /> <!-- 换成兼容.NET Core 3.1的Swashbuckle稳定版本 --> <PackageReference Include="SwashBuckle.AspNetCore.Swagger" Version="5.6.3" /> <PackageReference Include="SwashBuckle.AspNetCore.SwaggerUI" Version="5.6.3" /> </ItemGroup> </Project>
第二步:替换代码里的MvcJsonOptions为JsonOptions
假设你在Startup.cs里有配置JSON序列化的代码(比如旧的AddMvc().AddJsonOptions),原来的MvcJsonOptions已经被JsonOptions取代,而且配置项也换成了System.Text.Json的API(如果要继续用Newtonsoft.Json,后面会提)。
用默认System.Text.Json的配置方式
旧代码(会报错):
services.AddMvc() .AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); });
改成.NET Core 3.1的正确写法:
services.AddControllersWithViews() // 或者用AddMvc(),看你项目是API还是MVC .AddJsonOptions(options => { // 对应原来的驼峰命名配置 options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; });
如果要继续用Newtonsoft.Json(比如依赖旧的序列化逻辑)
如果你的项目之前用的是Newtonsoft.Json,不想换System.Text.Json,可以引用Microsoft.AspNetCore.Mvc.NewtonsoftJson包,然后这样配置:
services.AddControllersWithViews() .AddNewtonsoftJson(options => { // 这里就可以用原来的SerializerSettings配置了 options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); });
第三步:清理重建项目
最后别忘做这几步,确保依赖完全更新:
- 删掉项目根目录下的
bin和obj文件夹 - 打开终端运行
dotnet restore恢复依赖 - 重新编译运行项目
这样就能解决那个类型加载错误啦!
内容的提问来源于stack exchange,提问作者Harry R
相关产品推荐
相关产品推荐

