ISerializable Antarmuka
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Memungkinkan objek untuk mengontrol serialisasi dan deserialisasinya sendiri melalui serialisasi biner dan XML.
public interface class ISerializable
public interface ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
public interface ISerializable
type ISerializable = interface
[<System.Runtime.InteropServices.ComVisible(true)>]
type ISerializable = interface
Public Interface ISerializable
- Turunan
- Atribut
Keterangan
Kelas apa pun yang mungkin diserialisasikan menggunakan serialisasi biner atau XML harus ditandai dengan SerializableAttribute. Jika kelas perlu mengontrol proses serialisasi biner atau XML-nya, kelas dapat mengimplementasikan ISerializable antarmuka. Formatter memanggil GetObjectData pada waktu serialisasi dan mengisi yang disediakan SerializationInfo dengan semua data yang diperlukan untuk mewakili objek. Formatter membuat SerializationInfo dengan jenis objek dalam grafik. Objek yang perlu mengirim proksi untuk diri mereka sendiri dapat menggunakan FullTypeName metode dan AssemblyName pada SerializationInfo untuk mengubah informasi yang dikirimkan.
Dalam kasus pewarisan kelas, dimungkinkan untuk membuat serial kelas yang berasal dari kelas dasar yang mengimplementasikan ISerializable. Dalam hal ini, kelas turunan harus memanggil implementasi kelas dasar di GetObjectData dalam implementasinya GetObjectData. Jika tidak, data dari kelas dasar tidak akan diserialisasikan.
Antarmuka ISerializable menyiratkan konstruktor dengan tanda tangan constructor (SerializationInfo information, StreamingContext context)
. Pada waktu deserialisasi, konstruktor saat ini dipanggil hanya setelah data dalam telah dideserialisasi SerializationInfo oleh pemformat. Secara umum, konstruktor ini harus protected
jika kelas bukan sealed
.
Urutan di mana objek dideserialisasi tidak dapat dijamin. Misalnya, jika satu jenis mereferensikan jenis yang belum dideserialisasi, pengecualian akan terjadi. Jika Anda membuat jenis yang memiliki dependensi seperti itu, Anda dapat mengatasi masalah dengan menerapkan IDeserializationCallback
antarmuka dan OnDeserialization
metode .
Arsitektur serialisasi menangani jenis objek yang diperluas MarshalByRefObject sama dengan jenis yang diperluas Object. Jenis-jenis ini dapat ditandai dengan SerializableAttribute dan mengimplementasikan ISerializable antarmuka sebagai jenis objek lainnya. Status objek mereka akan ditangkap dan dipertahankan ke aliran.
Ketika jenis ini digunakan melalui System.Runtime.Remoting, infrastruktur jarak jauh menyediakan pengganti yang mendahului serialisasi khas dan sebaliknya menserialisasikan proksi ke MarshalByRefObject. Pengganti adalah pembantu yang tahu cara membuat serialisasi dan deserialisasi objek dari jenis tertentu. Proksi, tidak terlihat oleh pengguna dalam banyak kasus, akan berjenis ObjRef.
Sebagai pola desain umum, tidak biasa kelas ditandai dengan atribut yang dapat diserialisasikan dan diperluas MarshalByRefObject. Pengembang harus berpikir dengan cermat tentang kemungkinan serialisasi dan skenario jarak jauh saat menggabungkan kedua karakteristik ini. Salah satu contoh di mana ini mungkin berlaku adalah dengan MemoryStream. Sementara kelas MemoryStream dasar (Stream) meluas dari MarshalByRefObject, dimungkinkan untuk menangkap status MemoryStream dan memulihkannya sesering mungkin. Oleh karena itu, mungkin bermakna untuk menserialisasikan status aliran ini ke dalam database dan memulihkannya di beberapa titik waktu kemudian. Namun, ketika digunakan melalui jarak jauh, objek jenis ini akan diproksikan.
Untuk informasi selengkapnya tentang serialisasi kelas yang diperluas MarshalByRefObject, lihat RemotingSurrogateSelector. Untuk informasi selengkapnya tentang penerapan ISerializable, lihat Serialisasi Kustom.
Catatan
Antarmuka ini tidak berlaku untuk serialisasi JSON menggunakan System.Text.Json.
Catatan Bagi Implementer
Terapkan antarmuka ini untuk memungkinkan objek mengambil bagian dalam serialisasi dan deserialisasinya sendiri.
Metode
GetObjectData(SerializationInfo, StreamingContext) |
Kedaluwarsa.
Mengisi dengan data yang SerializationInfo diperlukan untuk membuat serialisasi objek target. |