Dela via


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.

Ange rätt JsonSerializerOptions information.

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

Berörda API:er