Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
ProblemDetails e ValidationProblemDetails anteriormente usaram conversores personalizados para garantir a serialização JSON devido à falta de suporte nativo para a opção IgnoreNullValues. Agora que essa opção é suportada System.Text.Json pelas APIs, removemos os conversores personalizados da estrutura em favor da serialização fornecida pela estrutura.
Como resultado desta alteração, as propriedades nos tipos ProblemDetails e ValidationProblemDetails deixam de assumir nomes de tipo em minúsculas. Os desenvolvedores devem especificar a JsonNamingPolicy para obter o comportamento correto.
Versão introduzida
ASP.NET Core 8.0 Preview 2
Comportamento anterior
Anteriormente, você podia adicionar JsonStringEnumConverter às opções de serialização como um conversor personalizado, e a desserialização resultava em um status 400 para 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
Novo comportamento
A partir do .NET 8, o mesmo código resulta em um null status para 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
Tipo de mudança disruptiva
Esta alteração é de natureza comportamental .
Motivo da mudança
Agora que JsonSerializerOptions.IgnoreNullValues é suportado por System.Text.Json pelas APIs, removemos os conversores personalizados em favor da serialização fornecida pela estrutura.
Ação recomendada
Forneça um JsonSerializerOptions com os detalhes corretos.
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);