Konstruktor non-publik dan tanpa parameter tidak digunakan untuk deserialisasi
Untuk konsistensi di semua moniker kerangka kerja target (TFM) yang didukung, konstruktor non-publik dan tanpa parameter tidak lagi digunakan untuk deserialisasi dengan JsonSerializer, secara default.
Deskripsi perubahan
Paket NuGet System.Text.Json mandiri yang mendukung .NET Standard 2.0 dan yang lebih tinggi, yaitu versi 4.6.0-4.7.2, bereaksi tidak konsisten dengan perilaku bawaan pada .NET Core 3.0 dan 3.1. Pada .NET Core 3.x, konstruktor internal dan privat dapat digunakan untuk deserialisasi. Dalam paket mandiri, konstruktor non-publik tidak diizinkan, dan MissingMethodException dilemparkan jika tidak ada konstruktor publik tanpa parameter yang ditentukan.
Dimulai dengan paket NuGet .NET 5 dan System.Text.Json 5.0.0, perilakunya konsisten antara paket NuGet dan API bawaan. Konstruktor non-publik, termasuk konstruktor tanpa parameter, diabaikan oleh serializer secara default. Serializer menggunakan salah satu konstruktor berikut untuk deserialisasi:
- Konstruktor publik dianotasikan dengan JsonConstructorAttribute.
- Konstruktor tanpa parameter publik.
- Konstruktor berparameter publik (jika itu satu-satunya konstruktor publik yang ada).
Jika tidak ada konstruktor ini yang tersedia, akan NotSupportedException dilemparkan jika Anda mencoba mendeserialisasi jenisnya.
Versi yang diperkenalkan
5.0
Alasan untuk berubah
- Untuk menerapkan perilaku yang konsisten antara semua moniker kerangka kerja target (TFM) yang System.Text.Json membangun untuk (.NET Core 3.0 dan versi yang lebih baru dan .NET Standard 2.0)
- Karena JsonSerializer tidak boleh memanggil area permukaan non-publik dari jenis, baik itu konstruktor, properti, atau bidang.
Tindakan yang direkomendasikan
- Jika Anda memiliki jenis dan layak, buat konstruktor tanpa parameter publik.
- Jika tidak, terapkan JsonConverter<T> untuk jenis dan kontrol perilaku deserialisasi. Anda dapat memanggil konstruktor non-publik dari JsonConverter<T> implementasi jika aturan aksesibilitas C# untuk skenario tersebut mengizinkannya.
API yang Terpengaruh
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk