Conversores personalizados para serialização removidos
ProblemDetails e ValidationProblemDetails conversores personalizados usados anteriormente para suportar a serialização JSON devido à falta de suporte interno para a IgnoreNullValues
opção. 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 dessa alteração, as propriedades nos ProblemDetails tipos e ValidationProblemDetails não assumem mais nomes de tipo minúsculos. 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 de rutura
Esta mudança é uma mudança comportamental.
Razão para a alteração
Agora que JsonSerializerOptions.IgnoreNullValues é suportado System.Text.Json
pelas APIs, removemos os conversores personalizados em favor da serialização fornecida pela estrutura.
Ação recomendada
Forneça os JsonSerializerOptions
detalhes corretos.
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);