小编典典

.Net Core 3.0 中的 IMvcBuilder AddJsonOptions 去了哪里?

all

我刚刚将我的 ASP Web API 项目从 . Net core 2.03.0. 我正在使用

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

以前是为了确保序列化 JSON 的小写。

升级到 3.0 后出现此错误:

错误
CS1061“IMvcBuilder”不包含“AddJsonOptions”的定义,并且找不到接受“IMvcBuilder”类型的第一个参数的可访问扩展方法“AddJsonOptions”(您是否缺少
using 指令或程序集引用?)

根据Asp.Net Core2.2中 MvcJsonOptions 的AddJsonOptions,AddJsonOptions 扩展方法是/由
Microsoft.AspNetCore.Mvc.Formatters.Json nuget
包提供的。我已经尝试安装/重新安装它,但仍然无法解决该方法。有趣的是,智能感知只显示
Microsoft.AspNetCore.Mvc.Formatters。即使我添加了 Json nuget 包,我也尝试添加 using 语句时出现
Xml 。 __

有什么想法吗? AddJsonOptions文档仅适用于
.Net 2.2,因此该方法可能已在 3.0 中被弃用,而转而采用其他一些配置机制? __


阅读 99

收藏
2022-07-30

共1个答案

小编典典

作为 ASP.NET Core 3.0 的一部分,团队默认不再包含 Json.NET。您可以在有关Microsoft.AspNetCore.App
的重大更改的公告
中阅读更多相关信息。

与 Json.NET 不同,ASP.NET Core 3.0 和 .NET Core 3.0 包含不同的 JSON
API,它更注重性能。您可以在有关“.NET Core 3.0 中 JSON
的未来”的公告中了解
更多信息。

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

为了使用 Json.NET 重新配置您的 ASP.NET Core 3.0 项目,您需要添加对 的 NuGet
引用Microsoft.AspNetCore.Mvc.NewtonsoftJson,这是包含所有必要位的包。然后,在 Startup
ConfigureServices,你需要像这样配置 MVC:

services.AddControllers()
    .AddNewtonsoftJson();

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

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