Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
System.Text.Json yansıma tabanlı seri hale getirici daha önce özellik meta verilerini çözümlemek için gecikmeli bir yükleme yaklaşımı kullanıyordu. Bu yaklaşım, temel alınan JSON'un desteklenmeyen özelliklerin hiçbirine bağlanmamış olması koşuluyla, desteklenmeyen özellik türleri içeren POCO'ların seri durumdan başarıyla çıkarılmalarını mümkün kıldı. (Bu, aynı türdeki örneklerin serileştirilememesi gerçeğine rağmen oldu.)
.NET 8'den itibaren serileştirici, tüm özelliklerin hem serileştirme hem de seriden çıkarmada öncelikli olarak çözümlenmesi için değiştirilmiştir. Bu değişiklik, serileştirilmiş tür grafiğinin erken analizini gerektiren birden çok çözümleyiciyi birleştirmek için daha iyi destek eklemek için yapılmıştır. Bu değişikliğin bir yan etkisi, önceki davranışa bağımlıysanız, yeni çalışma zamanı seri durumdan çıkarma hatalarıyla karşılaşmaya başlayabileceğinizdir.
Önceki davranış
.NET 7'de aşağıdaki seri durumdan çıkarma kodu başarılı oldu.
var result = JsonSerializer.Deserialize<MyPoco>("""{ "Value": 1 }"""); //, MyContext.Default.MyPoco);
Console.WriteLine(result.Value);
public class MyPoco
{
public int Value { get; set; }
public NestedValue Unsupported { get; set; }
}
public class NestedValue
{
public ReadOnlySpan<byte> Span => Array.Empty<byte>();
}
Yeni davranış
.NET 8'den başlayarak , Önceki davranış bölümündeki aynı kod çalışma zamanında bir InvalidOperationException atar.
System.InvalidOperationException: 'NestedValue' türündeki 'Span' özelliğinin 'System.ReadOnlySpan'1[System.Byte]' türü, bir işaretçi türü, bir başvuru yapısı veya belirli türler tarafından değiştirilmemiş genel parametreler içerdiğinden serileştirme veya seri durumdan çıkarma için geçersiz.
Bu hata, aynı türdeki bir örneği seri hale getirme girişiminde bulunduysanız, önceki sürümlerde bile oluşan hatayla tutarlıdır. Ayrıca, derleme zamanı hatası oluşturan kaynak oluşturucuyla da tutarlıdır.
Sürüm kullanıma sunulmuştur
.NET 8 Önizleme 4
Kesinti yaratan değişiklik türü
Bu değişiklik davranışsal bir değişikliktir.
Değişiklik nedeni
Bu değişiklik, birleştirilmiş kaynak tarafından oluşturulan bağlamlarda hızlı yol serileştirme desteğiyle ilgili yeni gereksinimler nedeniyle gerekliydi (bkz. dotnet/runtime#71933).
Önerilen eylem
Bu değişiklik sizin için sorunluysa şunları yapabilirsiniz:
Desteklenmeyen özelliği türünüzden kaldırın.
Desteklenmeyen tür için özel bir dönüştürücü yazın.
Özniteliğini JsonIgnoreAttribute ekleyin:
public class MyPoco { public int Value { get; set; } [JsonIgnore] public NestedValue Unsupported { get; set; } }