Dans le projet d'API Web ASP.NET Core 3.0, comment spécifiez-vous les options de sérialisation System.Text.Json pour sérialiser / désérialiser les propriétés de cas Pascal en cas de chameau et vice versa automatiquement?
Étant donné un modèle avec des propriétés Pascal Case telles que:
public class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
}
Et codez pour utiliser System.Text.Json pour désérialiser une chaîne JSON en type de Person
classe:
var json = "{\"firstname\":\"John\",\"lastname\":\"Smith\"}";
var person = JsonSerializer.Deserialize<Person>(json);
Ne désérialise pas correctement sauf si JsonPropertyName est utilisé avec chaque propriété comme:
public class Person
{
[JsonPropertyName("firstname")
public string Firstname { get; set; }
[JsonPropertyName("lastname")
public string Lastname { get; set; }
}
J'ai essayé ce qui suit startup.cs
, mais cela n'a pas aidé en termes de besoin 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;
});
Comment définir la sérialisation / désérialisation de Camel Case dans ASP.NET Core 3.0 à l'aide du nouvel espace de noms System.Text.Json?
Merci!
la source
Dans
startup.cs
:Cela signifie que vous n'avez pas besoin d'importer newtonsoft.json.
La seule autre option
options.JsonSerializerOptions.PropertyNamingPolicy
estJsonNamingPolicy.CamelCase
. Il ne semble pas y avoir d'autresJsonNamingPolicy
options de politique de dénomination, telles que snake_case ou PascalCase.la source
Vous pouvez utiliser
PropertyNameCaseInsensitive
. Vous devez le passer en paramètre au désérialiseur.qui (à partir des documents ):
Ainsi, il ne spécifie pas camelCase ou PascalCase mais il utilisera une comparaison insensible à la casse. Je ne sais pas si cela répond à vos besoins.
Remarque: je n'ai pas pu définir cette application sur une application console. Comme indiqué dans la réponse de Kahbazi
services.AddMvc().AddJsonOptions
etservices.AddControllers().AddJsonOptions
configurera Json pour les contrôleurs MVC et WebApi uniquement (c'est-à-dire ne configurera pas l'application des paramètres Json dans une application console, par exemple). Ce qui suit configurera uniquement System.Text.Json pour Json passé par un point de terminaison de contrôleur:la source
Si vous voulez une sérialisation CamelCase, utilisez ce code dans Startup.cs : (par exemple firstName)
Si vous voulez une sérialisation PascalCase, utilisez ce code dans Startup.cs : (par exemple FirstName)
la source
Vous pouvez toujours le définir à l'échelle de l'application en installant le package Nuget Microsoft.AspNetCore.Mvc.NewtonsoftJson, qui vous permet d'utiliser la précédente implémentation du sérialiseur Json:
Crédits à Poke, réponse trouvée ici: Où est passé IMvcBuilder AddJsonOptions dans .Net Core 3.0?
la source