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.
Aanbevolen actie
Geef de JsonSerializerOptions
juiste details op.
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);