有没有办法在 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?
新代码是:
.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();
});
我试图在我的 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?
新代码是:
.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();
});