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.
Pustaka kelas dasar .NET menyediakan dua serializer XML: XmlSerializer dan DataContractSerializer. Ada beberapa perbedaan halang antara keduanya, tetapi untuk tujuan migrasi, bagian ini hanya berfokus pada DataContractSerializer. Mengapa? Karena sepenuhnya mendukung model pemrograman serialisasi yang digunakan oleh BinaryFormatter. Semua jenis yang sudah ditandai sebagai [Serializable] atau diimplementasikan ISerializable dapat diserialisasikan dengan DataContractSerializer. Dimana tangkapannya? Jenis yang diketahui harus ditentukan di muka. Anda perlu mengenalnya dan bisa mendapatkan Type, bahkan untuk jenis privat.
Tidak diperlukan untuk menentukan koleksi paling populer atau jenis primitif seperti string atau DateTime (serializer memiliki daftar izin default sendiri), tetapi ada pengecualian seperti DateTimeOffset. Untuk informasi selengkapnya tentang jenis yang didukung, lihat Jenis yang didukung oleh serializer kontrak data.
Kepercayaan parsial adalah fitur .NET Framework yang tidak di-port ke .NET (Core). Jika kode Anda berjalan pada .NET Framework dan menggunakan fitur ini, baca tentang batasan yang mungkin berlaku untuk skenario seperti itu.
Migrasi langkah demi langkah
- Temukan semua penggunaan
BinaryFormatter. - Pastikan bahwa jalur kode serialisasi dicakup dengan pengujian, sehingga Anda dapat memverifikasi perubahan Anda dan menghindari pengenalan bug.
- Anda tidak perlu menginstal paket apa pun, seperti
DataContractSerializerhalnya bagian dari pustaka inti .NET. - Temukan semua jenis yang sedang diserialisasikan dengan
BinaryFormatter. Anda tidak perlu memodifikasi salah satunya, tetapi Anda mungkin perlu mencantumkannya melaluiknownTypesargumenDataContractSerializerkonstruktor. - Ganti penggunaan
BinaryFormatterdenganDataContractSerializer.
DataContractSerializer serializer = new(
type: input.GetType(),
knownTypes: new Type[]
{
typeof(MyType1),
typeof(MyType2)
});