Migrasi ke DataContractSerializer (XML)

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

  1. Temukan semua penggunaan BinaryFormatter.
  2. Pastikan bahwa jalur kode serialisasi dicakup dengan pengujian, sehingga Anda dapat memverifikasi perubahan Anda dan menghindari pengenalan bug.
  3. Anda tidak perlu menginstal paket apa pun, seperti DataContractSerializer halnya bagian dari pustaka inti .NET.
  4. Temukan semua jenis yang sedang diserialisasikan dengan BinaryFormatter. Anda tidak perlu memodifikasi salah satunya, tetapi Anda mungkin perlu mencantumkannya melalui knownTypes argumen DataContractSerializer konstruktor.
  5. Ganti penggunaan BinaryFormatter dengan DataContractSerializer.
DataContractSerializer serializer = new(
    type: input.GetType(),
    knownTypes: new Type[]
    {
        typeof(MyType1),
        typeof(MyType2)
    });