En el proyecto de API web ASP.NET Core 3.0, ¿cómo se especifican las opciones de serialización System.Text.Json para serializar / deserializar las propiedades de Pascal Case en Camel Case y viceversa automáticamente?
Dado un modelo con propiedades Pascal Case como:
public class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
Y código para usar System.Text.Json para deserializar una cadena JSON para el tipo de Person
clase:
var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Deserialize<Person>(json);
No se deserializa correctamente a menos que se utilice JsonPropertyName con cada propiedad como:
public class Person
{
[JsonPropertyName("firstname")
public string Firstname { get; set; }
[JsonPropertyName("lastname")
public string Lastname { get; set; }
}
Intenté lo siguiente startup.cs
, pero no ayudó en términos de necesidad 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;
});
¿Cómo puede configurar Camel Case serialize / deserialize en ASP.NET Core 3.0 usando el nuevo espacio de nombres System.Text.Json?
¡Gracias!
fuente
En
startup.cs
:Esto significa que no necesita importar newtonsoft.json.
La única otra opción para
options.JsonSerializerOptions.PropertyNamingPolicy
esJsonNamingPolicy.CamelCase
. No parece haber otrasJsonNamingPolicy
opciones de política de nombres, como snake_case o PascalCase.fuente
Puedes usar
PropertyNameCaseInsensitive
. Debe pasarlo como parámetro al deserializador.cual (de los documentos ):
Por lo tanto, no especifica camelCase o PascalCase, pero utilizará una comparación que no distingue entre mayúsculas y minúsculas. No estoy seguro si esto cumple con sus requisitos.
Nota: No pude configurar esta aplicación en una aplicación de consola. Como se señaló en la respuesta de Kahbazi
services.AddMvc().AddJsonOptions
yservices.AddControllers().AddJsonOptions
configurará Json solo para controladores MVC y WebApi (es decir, no configurará la configuración de Json en toda la aplicación de consola, por ejemplo). Lo siguiente solo configurará System.Text.Json para Json pasado a través de un punto final del controlador:fuente
Si desea la serialización de CamelCase, use este código en Startup.cs : (por ejemplo firstName)
Si desea la serialización de PascalCase, use este código en Startup.cs : (por ejemplo, FirstName)
fuente
Todavía puede configurarlo en toda la aplicación instalando Microsoft.AspNetCore.Mvc.NewtonsoftJson Nuget Package, que le permite utilizar la implementación anterior del serializador Json:
Créditos para empujar, la respuesta se encuentra aquí: ¿Dónde fue IMvcBuilder AddJsonOptions en .Net Core 3.0?
fuente