Niestandardowe konwertery do serializacji usunięte
ProblemDetails i ValidationProblemDetails wcześniej używane konwertery niestandardowe do obsługi serializacji JSON z powodu braku wbudowanej obsługi IgnoreNullValues
opcji. Teraz, gdy ta opcja jest obsługiwana przez System.Text.Json interfejsy API, usunęliśmy niestandardowe konwertery ze struktury na rzecz serializacji dostarczonej przez platformę.
W wyniku tej zmiany właściwości w typach ProblemDetails i ValidationProblemDetails nie zakładają już nazw typów małych liter. Deweloperzy muszą określić element , JsonNamingPolicy aby uzyskać prawidłowe zachowanie.
Wprowadzona wersja
ASP.NET Core 8.0 (wersja zapoznawcza 2)
Poprzednie zachowanie
Wcześniej można było dodać JsonStringEnumConverter do opcji serializacji jako konwerter niestandardowy, a deserializacja spowodowała 400 stanu dla elementu 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
Nowe zachowanie
Począwszy od platformy .NET 8, ten sam kod powoduje null
wyświetlenie stanu .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 zmiany powodującej niezgodność
Ta zmiana jest zmianą behawioralną.
Przyczyna wprowadzenia zmiany
Teraz, gdy JsonSerializerOptions.IgnoreNullValues interfejsy API są obsługiwane System.Text.Json
, usunęliśmy niestandardowe konwertery na rzecz serializacji dostarczonej przez platformę.
Zalecana akcja
JsonSerializerOptions
Podaj odpowiednie szczegóły.
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);