Anpassade konverterare för serialisering har tagits bort
ProblemDetails och ValidationProblemDetails tidigare använda anpassade konverterare för att stödja JSON-serialisering på grund av brist på inbyggt stöd för IgnoreNullValues
alternativet. Nu när det här alternativet stöds av API:erna System.Text.Json har vi tagit bort de anpassade konverterarna från ramverket till förmån för serialiseringen som tillhandahålls av ramverket.
Till följd av den här ändringen förutsätter egenskaperna i typerna och ValidationProblemDetails inte längre gemenerProblemDetails. Utvecklare måste ange en JsonNamingPolicy för att få rätt beteende.
Version introducerad
ASP.NET Core 8.0 Förhandsversion 2
Tidigare beteende
Tidigare kunde du lägga till JsonStringEnumConverter serialiseringsalternativen som en anpassad konverterare, och deserialisering resulterade i statusen 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
Nytt beteende
Från och med .NET 8 resulterar samma kod i 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 av icke-bakåtkompatibel ändring
Den här ändringen är en beteendeförändring.
Orsak till ändringen
Nu när JsonSerializerOptions.IgnoreNullValues det stöds av API:erna System.Text.Json
har vi tagit bort de anpassade konverterarna till förmån för serialiseringen som tillhandahålls av ramverket.
Rekommenderad åtgärd
Ange rätt JsonSerializerOptions
information.
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);