Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
ProblemDetails y ValidationProblemDetails usaron previamente convertidores personalizados para admitir la serialización JSON debido a la falta de compatibilidad integrada con la IgnoreNullValues
opción . Ahora que esta opción es compatible con las System.Text.Json API, hemos quitado los convertidores personalizados del marco en favor de la serialización proporcionada por el marco.
Como resultado de este cambio, las propiedades de los ProblemDetails tipos y ValidationProblemDetails ya no asumen nombres de tipo en minúsculas. Los desarrolladores deben especificar un JsonNamingPolicy para obtener el comportamiento correcto.
Versión introducida
ASP.NET Core 8.0 Preview 2
Comportamiento anterior
Anteriormente, podría agregar JsonStringEnumConverter a las opciones de serialización como un convertidor personalizado y la deserialización dio como resultado un estado 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
Nuevo comportamiento
A partir de .NET 8, el mismo código da como resultado un null
estado 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 cambio disruptivo
Este es un cambio de comportamiento.
Motivo del cambio
Ahora que JsonSerializerOptions.IgnoreNullValues es compatible con las System.Text.Json
API, hemos quitado los convertidores personalizados en favor de la serialización proporcionada por el marco.
Acción recomendada
Proporcione un JsonSerializerOptions
con los detalles correctos.
JsonSerializerOptions options = new()
{
PropertyNameCaseInsensitive = true
};
ValidationProblemDetails? details = await JsonSerializer.DeserializeAsync<ValidationProblemDetails>(stream, options);