Freigeben über


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.

Geben Sie JsonSerializerOptions mit den richtigen Details an.

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

Betroffene APIs