我刚刚将我的 ASP Web API 项目从 .Net core 2.0
升级到 3.0
。我正在使用
services.AddMvc()
.AddJsonOptions(options =>options.SerializerSettings.ContractResolver
= new DefaultContractResolver());
以前是为了确保序列化 JSON 的小写。
升级到 3.0 后出现此错误:
错误 CS1061“IMvcBuilder”不包含“AddJsonOptions”的定义,并且找不到接受“IMvcBuilder”类型的第一个参数的可访问扩展方法“AddJsonOptions”(您是否缺少 using 指令或程序集引用?)
根据 AddJsonOptions for MvcJsonOptions in Asp.Net Core 2.2,AddJsonOptions 扩展方法由 Microsoft.AspNetCore.Mvc.Formatters.Json nuget 包提供。我已经尝试安装/重新安装它,但仍然无法解决该方法。有趣的是,即使我添加了 Json nuget 包,当我尝试添加 using 语句时,智能感知仅显示 Microsoft.AspNetCore.Mvc.Formatters.Xml。
有什么想法吗? 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
方法有一个重载,允许您像在 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;
});
o.JsonSerializerOptions.PropertyNameCaseInsensitive = false;
o.JsonSerializerOptions.DictionaryKeyPolicy = null;
和 o.JsonSerializerOptions.PropertyNameCaseInsensitive = false;
确保您安装了 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包。
https://i.stack.imgur.com/ZW3LF.png
这会有所帮助
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
这对我有用,从适用于 ASP.NET Core 3.0 的 NuGet“dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson --version 3.1.0”版本 3.1.0 安装 NewtonsoftJson 包并使用以下代码-
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddNewtonsoftJson(opt => {
opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});
希望它工作正常,谢谢。
这对我有用,同时使用 .Net Core 3:click here
不定期副业成功案例分享
AddNewtonsoftJson
丢失了,即使在引用了那个Microsoft.AspNetCore.Mvc.NewtonsoftJson
引用之后也是如此。System.Text.Json.Serialization
命名空间中的[JsonIgnore]
。3.1.x
。如果您使用的是 ASP.NET Core 3.0(不再受支持),则需要添加该软件包的版本3.0.x
。