有没有一种方法可以将属性名称更改为ASP.NET Core 3.0 API中的snake_case?

时间:2019-07-21 03:06:34

标签: c# rest api asp.net-core-3.0

我正在尝试在我的ASP.NET Core 3.0 API中将所有属性名称全局更改为snake_case,但是找不到方法。

以前,在ASP.NET Core 2.2中,我使用了:

services.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new SnakeCaseNamingStrategy() })

现在在ASP Net Core 3.0中,我发现几乎没有相似之处的唯一地方是:

services.AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase)

但是不存在snake_case。

是否可以通过这种方式在ASP.NET Core 3.0 API中全局为请求和响应对象创建snake_case?

3 个答案:

答案 0 :(得分:2)

我在阅读https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-2.2&tabs=visual-studio

之后找到了解决方案

新代码为:

.AddNewtonsoftJson(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new SnakeCaseNamingStrategy() })

答案 1 :(得分:2)

snakcase_json repository的启发,一个简单但可能不是很有效的解决方案是:

public class SnakeCasePropertyNamingPolicy : JsonNamingPolicy
{
    public override string ConvertName(string name)
    {
        return string.Concat(name.Select((character, index) =>
                index > 0 && char.IsUpper(character)
                    ? "_" + character
                    : character.ToString()))
            .ToLower();
    }
}

然后在启动时添加以下选项:

services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.PropertyNamingPolicy = new SnakeCasePropertyNamingPolicy();
    });

答案 2 :(得分:1)

对于.NET Core 3.0,请使用:

 .AddJsonOptions(o => o.JsonSerializerOptions.PropertyNamingPolicy = null)