No projeto da API da Web do ASP.NET Core 3.0, como você especifica as opções de serialização System.Text.Json para serializar / desserializar as propriedades de Pascal Case para Camel Case e vice-versa automaticamente?
Dado um modelo com propriedades Pascal Case, como:
public class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
E código para usar System.Text.Json para desserializar uma string JSON para o tipo de Person
classe:
var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Deserialize<Person>(json);
Não desserializa com êxito, a menos que JsonPropertyName seja usado com cada propriedade, como:
public class Person
{
[JsonPropertyName("firstname")
public string Firstname { get; set; }
[JsonPropertyName("lastname")
public string Lastname { get; set; }
}
Tentei o seguinte em startup.cs
, mas não ajudou em termos de necessidade 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;
});
Como você pode definir Camel Case serializar / desserializar no ASP.NET Core 3.0 usando o novo espaço para nome System.Text.Json?
Obrigado!
fonte
Em
startup.cs
:Isso significa que você não precisa importar newtonsoft.json.
A única outra opção para
options.JsonSerializerOptions.PropertyNamingPolicy
éJsonNamingPolicy.CamelCase
. Não parece haver outrasJsonNamingPolicy
opções de política de nomenclatura, como snake_case ou PascalCase.fonte
Você pode usar
PropertyNameCaseInsensitive
. Você precisa passá-lo como um parâmetro para o desserializador.quais (do documentos ):
Portanto, ele não especifica camelCase ou PascalCase, mas usará comparação sem distinção entre maiúsculas e minúsculas. Não tenho certeza se isso atende aos seus requisitos.
Nota: Não foi possível definir esse aplicativo em um aplicativo de console. Como observado na resposta de Kahbazi
services.AddMvc().AddJsonOptions
eservices.AddControllers().AddJsonOptions
irá configurar JSON para apenas controladores de MVC e WebAPI (ou seja, não vai configure Json configurações de ampla aplicação em um aplicativo de console, por exemplo). A seguir, apenas será configurado o System.Text.Json for Json transmitido por um ponto de extremidade do controlador:fonte
Se você deseja a serialização do CamelCase, use este código em Startup.cs : (por exemplo, firstName)
Se você deseja a serialização do PascalCase, use este código em Startup.cs : (por exemplo, FirstName)
fonte
Você ainda pode configurá-lo em todo o aplicativo instalando o Pacote Microsoft.AspNetCore.Mvc.NewtonsoftJson Nuget, que permite usar a implementação anterior do serializador Json:
Créditos para Poke, resposta encontrada aqui: Para onde foi o IMvcBuilder AddJsonOptions no .Net Core 3.0?
fonte