Sdílet prostřednictvím


Vlastní převaděče pro serializaci odebrané

ProblemDetails a ValidationProblemDetails dříve používaly vlastní převaděče pro podporu serializace JSON kvůli nedostatku integrované podpory pro možnost IgnoreNullValues . Teď, když je tato možnost podporována System.Text.Json rozhraními API, jsme odebrali vlastní převaděče z architektury ve prospěch serializace poskytované architekturou.

V důsledku této změny již vlastnosti v ProblemDetails těchto typech ValidationProblemDetails nepřebírají názvy malých písmen. Vývojáři musí zadat správné JsonNamingPolicy chování.

Zavedená verze

ASP.NET Core 8.0 Preview 2

Předchozí chování

Dříve jste mohli přidat JsonStringEnumConverter do možností serializace jako vlastní převaděč a deserializace způsobila stav 400 pro 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

Nové chování

Počínaje rozhraním .NET 8 má stejný kód null za následek stav .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 zásadní změny

Tato změna je změna chování.

Důvod změny

Teď, když JsonSerializerOptions.IgnoreNullValues rozhraní API podporuje System.Text.Json , jsme odebrali vlastní převaděče ve prospěch serializace poskytované architekturou.

JsonSerializerOptions Zadejte správné podrobnosti.

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

Ovlivněná rozhraní API