.Net Core 3.0中IMvcBuilder AddJsonOptions放在哪里?

时间:2019-04-13 14:58:42

标签: asp.net asp.net-core json.net asp.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指令或程序集引用吗?)

根据AddJsonOptions for MvcJsonOptions in Asp.Net Core 2.2 Microsoft.AspNetCore.Mvc.Formatters.Json nuget包提供了AddJsonOptions扩展方法。我尝试安装/重新安装此程序,但仍然无法解决该方法。有趣的是,即使我添加了 Json nuget包,当我尝试添加using语句时,intellisense仍只显示Microsoft.AspNetCore.Mvc.Formatters。 Xml

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

6 个答案:

答案 0 :(得分:12)

这对我有用(.net核心3)

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

答案 1 :(得分:3)

作为ASP.NET Core 3.0的一部分,该团队默认情况下不再包括Json.NET。您通常可以在announcement on breaking changes to Microsoft.AspNetCore.App中阅读有关此内容的更多信息。

ASP.NET Core 3.0和.NET Core 3.0代替Json.NET,将包括一个不同的JSON API,该API更加注重性能。您可以在announcement about “The future of JSON in .NET Core 3.0”中了解更多信息。

目前,ASP.NET Core 3.0的预览版仍捆绑Json.NET,因为新API的工作尚未完成。但是,这些版本已经发布了使Json.NET成为可选依赖项的代码。如果您查看当前模板中的项目文件,则可以看到对Microsoft.AspNetCore.Mvc.NewtonsoftJson的引用。基本上,这是使您能够在ASP.NET Core 3.0中继续使用Json.NET的程序包(出于多种原因,我们希望这样做)。

ConfigureServices中,当前模板还具有以下代码:

services.AddMvc()
    .AddNewtonsoftJson();

这将设置MVC并将其配置为使用Json.NET而不是该新API。而且,该AddNewtonsoftJson方法具有重载功能,使您可以像在ASP.NET Core 2.x中使用AddJsonOptions一样配置Json.NET选项。

services.AddMvc()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings = new JsonSerializerSettings() { … };
    });

答案 2 :(得分:2)

这将有助于尝试安装Nuget软件包

Microsoft.AspNetCore.Mvc.NewtonsoftJson

答案 3 :(得分:1)

这会有所帮助

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")));
        }

答案 4 :(得分:1)

它对我有用,从 NuGet“dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson --version 3.1.0”版本 3.1.0 安装 NewtonsoftJson 包,适用于 ASP.NET Core 3.0 并使用以下代码-< /p>

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

希望一切顺利,谢谢。

答案 5 :(得分:1)

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

enter image description here