![](/img/trans.png)
[英]Is there a built in way of using snake case as the naming policy for JSON in ASP.NET Core 3?
[英]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/zh-cn/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存儲庫的啟發,一個簡單但可能不是非常有效的解決方案是:
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();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.