IMvcBuilder AddJsonOptions 在.Net Core 3.0 中去了哪里?
Where did IMvcBuilder AddJsonOptions go in .Net Core 3.0?
我刚刚将我的 ASP 网络 API 项目从 .Net core 2.0
升级到 3.0
。我正在使用
services.AddMvc()
.AddJsonOptions(options =>options.SerializerSettings.ContractResolver
= new DefaultContractResolver());
以前确保序列化的小写 JSON。
升级到 3.0 后出现此错误:
Error CS1061 'IMvcBuilder' does not contain a definition for
'AddJsonOptions' and no accessible extension method 'AddJsonOptions'
accepting a first argument of type 'IMvcBuilder' could be found (are
you missing a using directive or an assembly reference?)
根据 Microsoft.AspNetCore.Mvc.Formatters.Json nuget包提供的AddJsonOptions扩展方法is/was。我已经尝试 installing/reinstalling 这个方法,但仍然无法解决该方法。有趣的是,即使我添加了 Json[,当我尝试添加 using 语句时,intellisense 只显示 Microsoft.AspNetCore.Mvc.Formatters.Xml nuget 包。
知道发生了什么事吗? AddJsonOptions 的 documentation 仅适用于 .Net 2.2,所以也许该方法在 3.0 中已被弃用,取而代之的是其他一些配置机制?
作为 ASP.NET Core 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,它更侧重于性能。您可以在 announcement about “The future of JSON in .NET Core 3.0”.
中了解更多信息
ASP.NET Core 的新模板将不再与 Json.NET 捆绑在一起,但您可以轻松地重新配置项目以使用它而不是新的 JSON 库。这对于与旧项目的兼容性都很重要,而且因为新库不应该是一个完整的替代品,所以你不会在那里看到完整的功能集。
为了使用 Json.NET 重新配置您的 ASP.NET Core 3.0 项目,您需要添加对 Microsoft.AspNetCore.Mvc.NewtonsoftJson
的 NuGet 引用,这是包含所有必要位的包.然后,在 Startup 的 ConfigureServices
中,您需要像这样配置 MVC:
services.AddControllers()
.AddNewtonsoftJson();
这会设置 MVC 控制器并将其配置为使用 Json.NET 而不是新的 API。除了控制器,您还可以使用不同的 MVC 重载(例如,用于具有视图或 Razor 页面的控制器)。该 AddNewtonsoftJson
方法有一个重载,允许您配置 Json.NET 选项,就像您在 ASP.NET Core 2.x.[=18= 中习惯使用 AddJsonOptions
一样]
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 包
Microsoft.AspNetCore.Mvc.NewtonsoftJson
它对我有用,从 NuGet 安装 NewtonsoftJson 包“dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson --version 3.1.0” version 3.1.0 working for 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 包。
这对我有用,在使用 .Net Core 3 时:
click here
我刚刚将我的 ASP 网络 API 项目从 .Net core 2.0
升级到 3.0
。我正在使用
services.AddMvc()
.AddJsonOptions(options =>options.SerializerSettings.ContractResolver
= new DefaultContractResolver());
以前确保序列化的小写 JSON。
升级到 3.0 后出现此错误:
Error CS1061 'IMvcBuilder' does not contain a definition for 'AddJsonOptions' and no accessible extension method 'AddJsonOptions' accepting a first argument of type 'IMvcBuilder' could be found (are you missing a using directive or an assembly reference?)
根据
知道发生了什么事吗? AddJsonOptions 的 documentation 仅适用于 .Net 2.2,所以也许该方法在 3.0 中已被弃用,取而代之的是其他一些配置机制?
作为 ASP.NET Core 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,它更侧重于性能。您可以在 announcement about “The future of JSON in .NET Core 3.0”.
中了解更多信息ASP.NET Core 的新模板将不再与 Json.NET 捆绑在一起,但您可以轻松地重新配置项目以使用它而不是新的 JSON 库。这对于与旧项目的兼容性都很重要,而且因为新库不应该是一个完整的替代品,所以你不会在那里看到完整的功能集。
为了使用 Json.NET 重新配置您的 ASP.NET Core 3.0 项目,您需要添加对 Microsoft.AspNetCore.Mvc.NewtonsoftJson
的 NuGet 引用,这是包含所有必要位的包.然后,在 Startup 的 ConfigureServices
中,您需要像这样配置 MVC:
services.AddControllers()
.AddNewtonsoftJson();
这会设置 MVC 控制器并将其配置为使用 Json.NET 而不是新的 API。除了控制器,您还可以使用不同的 MVC 重载(例如,用于具有视图或 Razor 页面的控制器)。该 AddNewtonsoftJson
方法有一个重载,允许您配置 Json.NET 选项,就像您在 ASP.NET Core 2.x.[=18= 中习惯使用 AddJsonOptions
一样]
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 包
Microsoft.AspNetCore.Mvc.NewtonsoftJson
它对我有用,从 NuGet 安装 NewtonsoftJson 包“dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson --version 3.1.0” version 3.1.0 working for 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 包。
这对我有用,在使用 .Net Core 3 时: click here