簡體   English   中英

有沒有一種方法可以將屬性名稱更改為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/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM