Suppression des convertisseurs personnalisés pour la sérialisation
ProblemDetails et ValidationProblemDetails utilisaient précédemment des convertisseurs personnalisés pour gérer la sérialisation JSON en raison de l’absence de prise en charge intégrée de l’option IgnoreNullValues
. Maintenant que cette option est acceptée par les API System.Text.Json, les convertisseurs personnalisés ont été supprimés de l’infrastructure au profit de la sérialisation fournie par l’infrastructure.
Du fait de cette modification, les propriétés des types ProblemDetails et ValidationProblemDetails ne supposent plus de noms de type minuscules. Les développeurs doivent spécifier JsonNamingPolicy pour parvenir à un comportement adéquat.
Version introduite
ASP.NET Core 8.0 Preview 2
Comportement précédent
Il était auparavant possible d’ajouter JsonStringEnumConverter aux options de sérialisation en tant que convertisseur personnalisé. La désérialisation entraînait un statut de 400 pour ValidationProblemDetails.
string content = "{\"status\":400,\"detail\":\"HTTP egress is not enabled.\"}";
using MemoryStream stream = new();
using StreamWriter writer = new(stream);
writer.Write(content);
writer.Flush();
stream.Position = 0;
JsonSerializerOptions options = new();
options.Converters.Add(new JsonStringEnumConverter());
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);
Console.WriteLine(details.Status); // 400
Nouveau comportement
À compter de .NET 8, le même code génère un état null
pour ValidationProblemDetails.
string content = "{\"status\":400,\"detail\":\"HTTP egress is not enabled.\"}";
using MemoryStream stream = new();
using StreamWriter writer = new(stream);
writer.Write(content);
writer.Flush();
stream.Position = 0;
JsonSerializerOptions options = new();
options.Converters.Add(new JsonStringEnumConverter());
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);
Console.WriteLine(details.Status); // null
Type de changement cassant
Ce changement est un changement de comportement.
Raison du changement
Maintenant que JsonSerializerOptions.IgnoreNullValues est accepté par les API System.Text.Json
, les convertisseurs personnalisés ont été supprimés au profit de la sérialisation fournie par l’infrastructure.
Action recommandée
Fournissez JsonSerializerOptions
avec les informations appropriées.
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);