Aracılığıyla paylaş


Serileştirme için özel dönüştürücüler kaldırıldı

ProblemDetails seçeneği ValidationProblemDetails için yerleşik destek olmaması nedeniyle JSON serileştirmeyi desteklemek için IgnoreNullValues daha önce özel dönüştürücüler kullandı. Bu seçenek API'ler tarafından desteklendiğine System.Text.Json göre, çerçeve tarafından sağlanan serileştirmeye uygun olarak özel dönüştürücüleri çerçeveden kaldırdık.

Bu değişikliğin sonucu olarak, ve ValidationProblemDetails türlerindeki ProblemDetails özellikler artık küçük harfli tür adlarını varsaymaz. Geliştiricilerin doğru davranışı elde etmek için bir JsonNamingPolicy belirtmesi gerekir.

Sürüm kullanıma sunulmuştur

ASP.NET Core 8.0 Önizleme 2

Önceki davranış

Daha önce, serileştirme seçeneklerine özel dönüştürücü olarak ekleyebiliyor JsonStringEnumConverter ve seri durumdan çıkarma işlemi için ValidationProblemDetails400 durumuyla sonuçlandı.

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

Yeni davranış

.NET 8'den başlayarak, aynı kod için bir null durumla ValidationProblemDetailssonuçlanmıştır.

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

Hataya neden olan değişikliğin türü

Bu değişiklik davranışsal bir değişikliktir.

Değişiklik nedeni

JsonSerializerOptions.IgnoreNullValues ARTıK API'ler tarafından System.Text.Json desteklendiğine göre, çerçeve tarafından sağlanan serileştirmeye uygun özel dönüştürücüleri kaldırdık.

JsonSerializerOptions Doğru ayrıntıları sağlayın.

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

Etkilenen API’ler