Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Serializer berbasis refleksi System.Text.Json sebelumnya menggunakan pendekatan pemuatan tertunda untuk menyelesaikan informasi properti. Pendekatan itu memungkinkan POCO yang berisi jenis properti yang tidak didukung untuk berhasil dideserialisasi, asalkan JSON yang bersangkutan tidak mengikat ke salah satu properti yang tidak didukung. (Ini terlepas dari kenyataan bahwa instans dengan jenis yang sama akan gagal diserialisasikan.)
Dimulai dengan .NET 8, serializer telah diubah sehingga semua properti dievaluasi secara menyeluruh dalam proses serialisasi dan deserialisasi. Perubahan ini dilakukan untuk menambahkan dukungan yang lebih baik untuk menggabungkan beberapa pemecah masalah, yang mengharuskan analisis awal dari grafik jenis serial. Efek samping dari perubahan ini adalah bahwa jika Anda bergantung pada perilaku sebelumnya, Anda dapat mulai melihat kesalahan deserialisasi runtime baru.
Perilaku sebelumnya
Kode deserialisasi berikut berhasil di .NET 7.
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>();
}
Perilaku baru
Mulai dari .NET 8, kode yang sama dari bagian Perilaku sebelumnya memunculkan InvalidOperationException saat menjalankan program.
System.InvalidOperationException: Tipe 'System.ReadOnlySpan'1[System.Byte]' properti 'Span' pada tipe 'NestedValue' tidak valid untuk serialisasi atau deserialisasi karena merupakan jenis penunjuk, adalah struct ref, atau berisi parameter generik yang belum digantikan oleh jenis tertentu.
Kesalahan ini konsisten dengan kesalahan yang dilemparkan bahkan di versi sebelumnya jika Anda mencoba men-serialisasi instans dengan jenis yang sama. Ini juga konsisten dengan generator sumber daya, yang menghasilkan kesalahan saat kompilasi.
Versi yang diperkenalkan
Pratinjau .NET 8 4
Jenis perubahan yang memutus kompatibilitas
Perubahan ini adalah perubahan perilaku .
Alasan perubahan
Perubahan ini diwajibkan oleh persyaratan baru yang terkait dengan dukungan serialisasi jalur cepat dalam konteks yang dihasilkan sumber gabungan (lihat dotnet/runtime#71933).
Tindakan yang direkomendasikan
Jika perubahan ini bermasalah bagi Anda, Anda dapat:
Hapus properti yang tidak didukung dari tipe Anda.
Buat pengonversi kustom untuk jenis yang tidak didukung.
JsonIgnoreAttribute Tambahkan atribut:
public class MyPoco { public int Value { get; set; } [JsonIgnore] public NestedValue Unsupported { get; set; } }