Partilhar via


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.

Forneça os JsonSerializerOptions detalhes corretos.

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

APIs afetadas