Start Debugging
2023-08-06 Обновлено 2023-11-05 dotnetdotnet-8 Edit on GitHub

.NET 8 JsonNamingPolicy: SnakeCaseLower и KebabCaseLower (System.Text.Json)

Используйте новые `JsonNamingPolicy.SnakeCaseLower` (а также SnakeCaseUpper, KebabCaseLower, KebabCaseUpper) в .NET 8 для сериализации JSON в snake_case / kebab-case через System.Text.Json без своего конвертера.

В .NET 8 появилось несколько новых политик именования, которые можно использовать с сериализатором System.Text.Json. Перечислим их:

Посмотрим на сериализованный вывод для каждой. Возьмём класс Car:

class Car
{
    public string Make { get; set; }
    public string ModelID { get; set; }
    public int LaunchYear { get; set; }
}

И будем сериализовать вот такой экземпляр:

var car = new Car
{
    Make = "Mazda",
    ModelID = "MX-5",
    LaunchYear = 1989
};

snake_case в нижнем регистре

Чтобы сериализовать в snake_case в нижнем регистре, нужно указать JsonNamingPolicy.SnakeCaseLower в качестве PropertyNamingPolicy внутри JsonSerializerOptions:

var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower };
JsonSerializer.Serialize(car, options);

Вывод:

{"make":"Mazda","model_id":"MX-5","launch_year":1989}

SNAKE_CASE в верхнем регистре

Аналогично, но с JsonNamingPolicy.SnakeCaseUpper в качестве политики. Вывод:

{"MAKE":"Mazda","MODEL_ID":"MX-5","LAUNCH_YEAR":1989}

kebab-case в нижнем регистре

Чтобы сериализовать в kebab-case в нижнем регистре, укажите JsonNamingPolicy.KebabCaseLower в PropertyNamingPolicy внутри JsonSerializerOptions:

var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.KebabCaseLower };
JsonSerializer.Serialize(car, options);

Получим такой JSON:

{"make":"Mazda","model-id":"MX-5","launch-year":1989}

KEBAB-CASE в верхнем регистре

Так же, как и в предыдущем примере, но с JsonNamingPolicy.KebabCaseUpper. Получите:

{"MAKE":"Mazda","MODEL-ID":"MX-5","LAUNCH-YEAR":1989}

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад