从asp.net Core 1.0.0-rc2-final切换到1.0.0时,JSON属性现在小写
本文关键字:属性 JSON 0时 net asp Core 0-rc2-final | 更新日期: 2023-09-27 17:54:45
我刚刚把我们的项目从asp.net Core 1.0.0-rc2-final换成了1.0.0。我们的网站和客户端已经停止工作,因为JSON属性的大写。例如,这行JavaScript现在失败了
for (var i = 0; i < collection.Items.length; i++){
因为控制器现在调用数组"items"而不是"items"。除了安装更新包和编辑项目之外,我没有做任何更改。json文件。我没有改变c#模型文件,它们仍然大写它们的属性。
为什么要ASP ?Net Core控制器开始返回JSON与小写的属性?我如何回到他们尊重模型中属性名的情况?
如果你在谷歌上找到了这个,并且正在寻找Core 3的解决方案
Core 3使用System.Text.Json
,默认情况下不保留大小写。正如提到的这个GitHub问题,将PropertyNamingPolicy
设置为null将解决这个问题。
public void ConfigureServices(IServiceCollection services)
{
...
services.AddControllers()
.AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null);
,如果你不想改变全局设置,就像这样:
return Json(obj, new JsonSerializerOptions { PropertyNamingPolicy = null });
MVC现在默认使用驼峰大小写序列化JSON
使用以下代码避免默认情况下的驼峰大小写
services.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
来源:https://github.com/aspnet/Announcements/issues/194
您可以这样更改行为:
services
.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
请看这里的公告:https://github.com/aspnet/Announcements/issues/194
对于那些迁移到Core 3.1并拥有Core MVC项目的人可以在Startup.cs中使用以下设置代码:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddControllersWithViews().AddJsonOptions(opts => opts.JsonSerializerOptions.PropertyNamingPolicy = null);
...
}
这将在dotnet core 3 webapi中修复它,因此它根本不会改变您的属性名称,并且您可以返回给您的客户端您想要的内容。
在Startup.cs:public void ConfigureServices(IServiceCollection services)
{
services.AddControllers().AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null);
services.AddHttpClient();
}
对于不想全局设置它的人,可以使用ContractResolver也以Json结果返回:
public IActionResult MyMethod()
{
var obj = new {myValue = 1};
return Json(obj, new JsonSerializerSettings {ContractResolver = new DefaultContractResolver()});
}
对于asp.net MVC Core 6 Web API,在Program.cs文件中添加以下代码将确保JSON属性名称在swagger UI上以右大小写跟随c#模型属性名称。没有第三方包需要
using Microsoft.AspNetCore.Mvc;
builder.Services.Configure<JsonOptions>(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});
对于正在使用ASP.net WEB API(而不是ASP。网络核心)。
在WebApiConfig中添加这一行。
//Comment this jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
在这里添加这个作为答案,因为它在谷歌搜索web api时也是最先出现的
Install
Microsoft.AspNetCore.Mvc.NewtonsoftJson
对于。net 6,你应该选择这个版本:6.0.13
,然后进入Program.cs,像这样配置
builder.Services
.AddControllersWithViews()
.AddNewtonsoftJson(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
X版本,使用此代码,默认情况下可以避免驼峰大小写。您需要在Startup.cs文件的ConfigureServices方法中添加以下代码:
services.AddMvc()
.AddJsonOptions(o =>
{
if (o.SerializerSettings.ContractResolver != null)
{
var castedResolver = o.SerializerSettings.ContractResolver
as DefaultContractResolver;
castedResolver.NamingStrategy = null;
}
});
最近在。net 6中出现了这个问题
解决方案是我需要安装
Microsoft.AspNetCore.Mvc。NewtonsoftJson 0。注意,使用7。.Net 7)
从Mason的帖子中发现:
Microsoft.AspNetCore.Mvc。NewtonsoftJson 6.0.2与net5.0不兼容
using Microsoft.AspNetCore.Mvc;
builder.Services.Configure<JsonOptions>(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = null;
});