IMvcBuilder AddJsonOptions 在.Net Core 3.0中的位置?

我刚刚把我的 ASP web API 项目从.Net core 2.0升级到了 3.0

     services.AddMvc()
.AddJsonOptions(options =>options.SerializerSettings.ContractResolver
= new DefaultContractResolver());

以确保序列化 JSON 的小写。

升级到3.0之后,我得到了这个错误:

错误 CS1061‘ IMvcBuilder’不包含 ‘ AddJsonOptions’和无法访问的扩展方法‘ AddJsonOptions’ 可以找到接受类型为“ IMvcBuilder”的第一个参数(是 您是否缺少 using 指令或汇编引用?)

根据 Asp.Net Core 2.2中 MvcJsonOptions 的 AddJsonOptions,AddJsonOptions 扩展方法是由 微软。 AspNetCore。 Mvc。格式化。 Json核心软件包提供的。我已经尝试安装/重新安装这个,但仍然不能解决该方法。有趣的是,智能感知只显示微软。AspNetCore.MVC.当我尝试添加 using 语句时,尽管我添加了 杰森 nuget 包。

知道是怎么回事吗?AddJsonOptions文件只上升到。Net 2.2所以也许这种方法在3.0中已经被弃用了,转而使用其他的配置机制?

133109 次浏览

作为 ASP.NET Core 3.0的一部分,该团队已经不再默认包含 Json.NET。你可以在 关于微软突破性变化的声明中读到更多关于这方面的内容。

代替了 Json.NET,ASP.NET Core 3.0和。NET Core 3.0包括一个不同的 JSON API,它更关注性能。你可以在 关于“ . NET Core 3.0中 JSON 的未来”的声明中了解更多。

NET Core 的新模板将不再与 JSON.NET 绑定,但是您可以轻松地重新配置项目,以使用它而不是新的 JSON 库。这对于与旧项目的兼容性很重要,而且因为新库不应该是完全替代的,所以您不会看到完整的特性集。

为了使用 Json.NET 重新配置您的 ASP.NET Core 3.0项目,您需要向 Microsoft.AspNetCore.Mvc.NewtonsoftJson添加一个 NuGet 引用,Microsoft.AspNetCore.Mvc.NewtonsoftJson是包含所有必要位的包。然后,在启动程序的 ConfigureServices中,您需要像下面这样配置 MVC:

services.AddControllers()
.AddNewtonsoftJson();

这将设置 MVC 控制器并将其配置为使用 Json.NET 而不是新的 API。除了控制器,您还可以使用不同的 MVC 重载(例如,对于具有视图的控制器,或者 Razor 页面)。该 AddNewtonsoftJson方法有一个重载,允许您像在 ASP.NET Core 2.x 中使用 AddJsonOptions那样配置 Json.NET 选项。

services.AddControllers()
.AddNewtonsoftJson(options =>
{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});

在使用 .Net Core 3时,这种方法对我很有效:

services.AddMvc().AddJsonOptions(o =>
{
o.JsonSerializerOptions.PropertyNamingPolicy = null;
o.JsonSerializerOptions.DictionaryKeyPolicy = null;
});

这会有帮助的

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers().AddJsonOptions(options=> {  options.JsonSerializerOptions.PropertyNamingPolicy = null;
options.JsonSerializerOptions.DictionaryKeyPolicy = null;


});


services.AddDbContext<PaymentDetailContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DevConnection")));
}

这将有助于尝试安装 Nuget 包

微软。 AspNetCore

这是我的工作,安装从 NuGet 的 NewtonsoftJson 软件包“ dotnet 添加软件包微软。AspNetCore.MVC.NewtonsoftJson ——3.1.0“版本3.1.0,适用于 ASP.NET Core 3.0,并使用以下代码-

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddNewtonsoftJson(opt => {
opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});

希望一切正常,谢谢。

确保安装了 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包。

enter image description here

当我使用.Net Core 3: 点击这里