Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
ProblemDetails und ValidationProblemDetails verwendeten zuvor benutzerdefinierte Konverter, um die JSON-Serialisierung zu unterstützen, da die integrierte Unterstützung für die IgnoreNullValues Option fehlte. Da diese Option nun von den System.Text.Json APIs unterstützt wird, haben wir die benutzerdefinierten Konverter zugunsten der vom Framework bereitgestellten Serialisierung aus dem Framework entfernt.
Aufgrund dieser Änderung gehen die Eigenschaften in den ProblemDetails und ValidationProblemDetails typen nicht mehr von Kleinbuchstaben aus. Entwickler müssen ein JsonNamingPolicy angeben, um das gewünschte Verhalten zu erzielen.
Eingeführt in Version
ASP.NET Core 8.0 Preview 2
Vorheriges Verhalten
Zuvor konnten Sie JsonStringEnumConverter als benutzerdefinierten Konverter zu den Serialisierungsoptionen hinzufügen, und die Deserialisierung führte zu einem Statuscode 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 derselbe Code zu einem null Status 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
Art der einschneidenden Änderung
Diese Änderung ist eine Verhaltensänderung.
Grund für Änderung
JsonSerializerOptions.IgnoreNullValues Nachdem die System.Text.Json APIs nun unterstützt werden, haben wir die benutzerdefinierten Konverter zugunsten der vom Framework bereitgestellten Serialisierung entfernt.
Empfohlene Aktion
Geben Sie JsonSerializerOptions die richtigen Details an.
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);