Benutzerdefinierte Konverter für die Serialisierung entfernt

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.

Geben Sie JsonSerializerOptions die richtigen Details an.

JsonSerializerOptions options = new()
{
   PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);

Betroffene APIs