有没有办法在 ASP.NET Core 3.0 API 中将 属性 名称更改为 snake_case?

Is there a way to change the property names to snake_case in an ASP.NET Core 3.0 API?

我试图在我的 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?

阅读后我找到了解决方案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() })

对于 .NET Core 3.0,使用:

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

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();
    });