Seri durumdan çıkarma için ortak olmayan, parametresiz oluşturucular kullanılmıyor

Desteklenen tüm hedef çerçeve adlarında (TFM' ler) tutarlılık için genel olmayan, parametresiz oluşturucular artık ile JsonSerializerseri durumdan çıkarma için varsayılan olarak kullanılmaz.

Açıklama değiştirildi

.NET Standard 2.0 ve üzerini, yani 4.6.0-4.7.2 sürümlerini destekleyen tek başına System.Text.Json NuGet paketleri , .NET Core 3.0 ve 3.1'deki yerleşik davranışla tutarsız davranır. .NET Core 3.x'te, seri durumdan çıkarma için iç ve özel oluşturucular kullanılabilir. Tek başına paketlerde, ortak olmayan oluşturuculara izin verilmez ve ortak, parametresiz oluşturucu tanımlanmadıysa oluşturulur MissingMethodException .

.NET 5 ve System.Text.Json NuGet paketi 5.0.0'dan başlayarak, NuGet paketi ile yerleşik API'ler arasındaki davranış tutarlıdır. Parametresiz oluşturucular da dahil olmak üzere genel olmayan oluşturucular, seri hale getirici tarafından varsayılan olarak yoksayılır. Seri hale getirici seri durumdan çıkarma için aşağıdaki oluşturuculardan birini kullanır:

  • ile JsonConstructorAttributeek açıklamalı genel oluşturucu.
  • Genel parametresiz oluşturucu.
  • Ortak parametreli oluşturucu (mevcut tek ortak oluşturucuysa).

Bu oluşturuculardan hiçbiri kullanılabilir değilse, türü seri durumdan çıkarma girişiminde bulunursanız bir NotSupportedException oluşturulur.

Sürüm kullanıma sunulmuştur

5.0

Değişiklik nedeni

  • (.NET Core 3.0 ve sonraki sürümleri ve .NET Standard 2.0) için derleyen System.Text.Json tüm hedef çerçeve takma adları (TFM)'ler arasında tutarlı davranışı zorlamak için
  • Çünkü JsonSerializer oluşturucu, özellik veya alan olsun, bir türün genel olmayan yüzey alanını çağırmamalıdır.
  • Türün sahibiyseniz ve uygunsa parametresiz oluşturucuyu genel yapın.
  • Aksi takdirde, türü için bir JsonConverter<T> uygulayın ve seri durumdan çıkarma davranışını denetleyin. Bu senaryo için C# erişilebilirlik kuralları izin verirse, bir uygulamadan genel olmayan bir JsonConverter<T> oluşturucu çağırabilirsiniz.

Etkilenen API’ler