В проекте ASP.NET Core 3.0 Web API как указать параметры сериализации System.Text.Json для сериализации / десериализации свойств Pascal Case в Camel Case и наоборот автоматически?
Дана модель со свойствами Pascal Case, такими как:
public class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
И код для использования System.Text.Json для десериализации строки JSON для типа Person
класса:
var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Deserialize<Person>(json);
Не удастся успешно десериализовать, если JsonPropertyName не используется с каждым свойством, например:
public class Person
{
[JsonPropertyName("firstname")
public string Firstname { get; set; }
[JsonPropertyName("lastname")
public string Lastname { get; set; }
}
Я попробовал следующее startup.cs
, но это не помогло с точки зрения необходимости JsonPropertyName
:
services.AddMvc().AddJsonOptions(options =>
{
options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});
// also the following given it's a Web API project
services.AddControllers().AddJsonOptions(options => {
options.JsonSerializerOptions.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
});
Как настроить сериализацию / десериализацию в Camel Case в ASP.NET Core 3.0 с использованием нового пространства имен System.Text.Json?
Спасибо!
источник
В
startup.cs
:Это означает, что вам не нужно импортировать newtonsoft.json.
Единственным вариантом
options.JsonSerializerOptions.PropertyNamingPolicy
являетсяJsonNamingPolicy.CamelCase
. Кажется, что нет никаких другихJsonNamingPolicy
параметров политики именования, таких как snake_case или PascalCase.источник
Вы можете использовать
PropertyNameCaseInsensitive
. Вы должны передать его в качестве параметра десериализатору.который (из документов ):
Таким образом, он не определяет camelCase или PascalCase, но будет использовать сравнение без учета регистра. Не уверен, что это соответствует вашим требованиям.
Примечание: я не смог установить это приложение широко в консольном приложении. Как отмечено в ответе Kahbazi в
services.AddMvc().AddJsonOptions
иservices.AddControllers().AddJsonOptions
настроит JSon только MVC и WebAPI контроллеров (т.е. не будет настроить JSon Настройки приложения широкие в консольном приложении, например). Ниже приведено только конфигурирование System.Text.Json для Json, прошедшего через конечную точку контроллера:источник
Если вы хотите сериализации CamelCase, используйте этот код в Startup.cs : (например, firstName)
Если вы хотите сериализацию PascalCase, используйте этот код в Startup.cs : (например, FirstName)
источник
Вы по-прежнему можете настроить его для всего приложения, установив пакет Nuget Microsoft.AspNetCore.Mvc.NewtonsoftJson, который позволяет использовать предыдущую реализацию сериализатора Json:
Кредиты для Poke, ответ найден здесь: Где IMvcBuilder AddJsonOptions находится в .Net Core 3.0?
источник