Benutzerdefinierte Konverter für die Serialisierung entfernt
ProblemDetails und ValidationProblemDetails verwendeten zuvor benutzerdefinierte Konverter, um die JSON-Serialisierung zu unterstützen, da es keine integrierte Unterstützung für die Option IgnoreNullValues
gab. Da diese Option nun von den System.Text.Json-APIs unterstützt wird, haben wir die benutzerdefinierten Konverter aus dem Framework entfernt und stattdessen die vom Framework bereitgestellte Serialisierung verwendet.
Infolge dieser Änderung gehen die Eigenschaften in den Typen ProblemDetails und ValidationProblemDetails nicht mehr von klein geschriebenen Namen aus. Entwickler müssen eine JsonNamingPolicy angeben, um das richtige Verhalten zu erhalten.
Eingeführt in Version
ASP.NET Core 8.0 Vorschauversion 2
Vorheriges Verhalten
Zuvor konnten Sie JsonStringEnumConverter als benutzerdefinierten Konverter zu den Serialisierungsoptionen hinzufügen, und die Deserialisierung führte zum Status 400 für 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
Neues Verhalten
Ab .NET 8 führt der gleiche Code zum Status null
für 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
Typ des Breaking Changes
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
Nachdem JsonSerializerOptions.IgnoreNullValues von den System.Text.Json
-APIs unterstützt wird, haben wir die benutzerdefinierten Konverter zugunsten der vom Framework bereitgestellten Serialisierung entfernt.
Empfohlene Maßnahme
Geben Sie JsonSerializerOptions
mit den richtigen Details an.
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);