我正在尝试在我的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?
答案 0 :(得分:2)
新代码为:
.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)