Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 inte längre egenskaperna i ProblemDetails- och ValidationProblemDetails-typerna gemener. Utvecklare måste ange en JsonNamingPolicy för att få rätt beteende.
Version lanserad
ASP.NET Core 8.0 Förhandsversion 2
Tidigare beteende
Tidigare kunde du lägga till JsonStringEnumConverter till serialiseringsalternativen som en anpassad konverterare, och deserialisering resulterade i en 400-status 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 brytande ändring
Den här ändringen är en beteendeförändring.
Orsak till ändring
Nu när JsonSerializerOptions.IgnoreNullValues stöds av System.Text.Json-API:erna har vi tagit bort de anpassade konverterarna till förmån för serialiseringen som tillhandahålls av ramverket.
Rekommenderad åtgärd
Ange ett JsonSerializerOptions med rätt information.
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);