Vlastní převaděče pro serializaci odebrané
ProblemDetails a ValidationProblemDetails dříve používaly vlastní převaděče pro podporu serializace JSON kvůli nedostatku integrované podpory pro možnost IgnoreNullValues
. Teď, když je tato možnost podporována System.Text.Json rozhraními API, jsme odebrali vlastní převaděče z architektury ve prospěch serializace poskytované architekturou.
V důsledku této změny již vlastnosti v ProblemDetails těchto typech ValidationProblemDetails nepřebírají názvy malých písmen. Vývojáři musí zadat správné JsonNamingPolicy chování.
Zavedená verze
ASP.NET Core 8.0 Preview 2
Předchozí chování
Dříve jste mohli přidat JsonStringEnumConverter do možností serializace jako vlastní převaděč a deserializace způsobila stav 400 pro 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
Nové chování
Počínaje rozhraním .NET 8 má stejný kód null
za následek stav .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 zásadní změny
Tato změna je změna chování.
Důvod změny
Teď, když JsonSerializerOptions.IgnoreNullValues rozhraní API podporuje System.Text.Json
, jsme odebrali vlastní převaděče ve prospěch serializace poskytované architekturou.
Doporučená akce
JsonSerializerOptions
Zadejte správné podrobnosti.
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);