Delen via


Aangepaste conversieprogramma's voor serialisatie verwijderd

ProblemDetails en ValidationProblemDetails eerder aangepaste conversieprogramma's gebruikt om JSON-serialisatie te ondersteunen vanwege een gebrek aan ingebouwde ondersteuning voor de IgnoreNullValues optie. Nu deze optie wordt ondersteund door de System.Text.Json API's, hebben we de aangepaste conversieprogramma's verwijderd uit het framework ten gunste van de serialisatie die door het framework wordt geboden.

Als gevolg van deze wijziging gaan de eigenschappen in de ProblemDetails en ValidationProblemDetails typen niet langer uit van namen van kleine letters. Ontwikkelaars moeten een JsonNamingPolicy opgeven om het juiste gedrag te krijgen.

Versie geïntroduceerd

ASP.NET Core 8.0 Preview 2

Vorig gedrag

Voorheen kon JsonStringEnumConverter u toevoegen aan de serialisatieopties als een aangepast conversieprogramma en deserialisatie resulteerde in een status van 400 voor 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

Nieuw gedrag

Vanaf .NET 8 resulteert dezelfde code in een null status voor 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 wijziging die fouten veroorzaken

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Nu dat JsonSerializerOptions.IgnoreNullValues wordt ondersteund door de System.Text.Json API's, hebben we de aangepaste conversieprogramma's verwijderd ten gunste van de serialisatie die door het framework wordt geboden.

Geef de JsonSerializerOptions juiste details op.

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

Betrokken API's