我刚刚将我的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指令或程序集引用?)

根据AddJsonOptions for MvcJsonOptions in Asp.Net Core 2.2,AddJsonOptions扩展方法是由Microsoft.AspNetCore.Mvc.Formatters.Json Nuget包提供的.我已try 安装/重新安装此程序,但仍无法解决该方法.有趣的是,即使我添加了Json Nuget包,当我try 添加Using语句时,IntelliSense仅显示Microsoft.AspNetCore.Mvc.Formatters.Xml.

知道发生了什么吗?AddJsonOptionsdocumentation只升到documentation.Net 2.2那么,也许该方法在3.0中已被弃用,取而代之的是其他一些配置机制?

推荐答案

作为ASP的一部分.NET核心3.0,团队不再使用Json.默认情况下为NET.一般来说,你可以在announcement on breaking changes to Microsoft.AspNetCore.App页阅读更多关于这方面的内容.

与Json.NET不同,ASP.NET Core 3.0和.NET Core 3.0包含了不同的JSON API,该API更注重性能.你可以在announcement about “The future of JSON in .NET Core 3.0”米比赛中了解到更多.

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重载(例如,对于具有视图或页面的控制器).AddNewtonsoftJson方法有一个重载,允许您配置Json.NET选项,就像您在ASP中习惯使用AddJsonOptions一样.网络核心2.十、

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

Asp.net相关问答推荐

在Docker Windows中,ASP.NET核心容器在自定义端口8080上运行,但ASP.NET容器在固定端口80上运行

如何在 asp.net 服务器中使用字体

目前不支持超过 65534 个段的跨区存档

WebResource.axd 上的填充无效且无法删除异常

逐步 ASP.NET 自动构建/部署

如何向 Array.IndexOf 添加不区分大小写的选项

asp.net - 会话 - 多个浏览器选项卡 - 不同的会话?

IIS 将旧用户名返回到我的应用程序

Web Api 请求内容在操作过滤器中为空

哪些行为驱动开发 (BDD) 工具/框架可用于 Microsoft Stack?

当用户使表单无效时单击取消按钮时,如何清除 MVC 客户端验证错误?

使用 Moq 验证活动注册

禁用 web.config 继承?

由于文件路径太长,网站发布失败

要调用此方法,Membership.Provider属性必须是ExtendedMembershipProvider的实例

会员生成密码 仅限字母数字密码?

IIS - 无法通过 ip 地址而不是 localhost 访问页面

ASP.NET MVC NonAction 含义

为什么 C# 对于 CSC 文件会遇到此错误?

如何调试 w3wp clr.dll 错误