从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与小写的属性?我如何回到他们尊重模型中属性名的情况?

从asp.net Core 1.0.0-rc2-final切换到1.0.0时,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;
});