Saya menemukan bahwa beberapa kelas menggunakan [Serializable]
atribut.
- Apa itu?
- Kapan saya harus menggunakannya?
- Apa jenis manfaat yang akan saya dapatkan?
Saya menemukan bahwa beberapa kelas menggunakan [Serializable]
atribut.
Jawaban:
Saat Anda membuat objek di aplikasi .Net framework, Anda tidak perlu memikirkan bagaimana data disimpan dalam memori. Karena .Net Framework mengurusnya untuk Anda. Namun, jika Anda ingin menyimpan konten suatu objek ke file, mengirim objek ke proses lain atau mengirimkannya ke seluruh jaringan, Anda harus memikirkan bagaimana objek tersebut diwakili karena Anda perlu mengonversi ke format lain. . Konversi ini disebut SERIALISASI.
Serialisasi memungkinkan pengembang untuk menyimpan keadaan suatu objek dan membuatnya kembali sesuai kebutuhan, menyediakan penyimpanan objek serta pertukaran data. Melalui serialisasi, pengembang dapat melakukan tindakan seperti mengirim objek ke aplikasi jarak jauh dengan menggunakan Layanan Web, meneruskan objek dari satu domain ke domain lain, melewati objek melalui firewall sebagai string XML, atau menjaga keamanan atau khusus pengguna informasi lintas aplikasi.
Berlaku SerializableAttribute
untuk jenis yang menunjukkan bahwa contoh jenis ini dapat diserialisasi. Terapkan SerializableAttribute
bahkan jika kelas juga mengimplementasikan ISerializable
antarmuka untuk mengontrol proses serialisasi.
Semua bidang publik dan pribadi dalam jenis yang ditandai oleh SerializableAttribute
serialisasi secara default, kecuali jika jenis mengimplementasikan ISerializable
antarmuka untuk mengganti proses serialisasi. Proses serialisasi default tidak termasuk bidang yang ditandai dengan NonSerializedAttribute
. Jika bidang jenis serializable berisi pointer, pegangan, atau beberapa struktur data lain yang khusus untuk lingkungan tertentu, dan tidak dapat direkonstitusi secara bermakna di lingkungan yang berbeda, maka Anda mungkin ingin menerapkan NonSerializedAttribute
bidang itu.
Lihat MSDN untuk detail lebih lanjut.
Edit 1
Alasan apa pun untuk tidak menandai sesuatu sebagai serializable
Saat mentransfer atau menyimpan data, Anda hanya perlu mengirim atau menyimpan data yang diperlukan. Jadi akan ada sedikit keterlambatan transfer dan masalah penyimpanan. Jadi, Anda dapat menyisih data yang tidak perlu saat membuat serial.
Beberapa kegunaan praktis untuk [Serializable]
atribut:
BinaryFormatter
kelas di System.Runtime.Serialization.Formatters.BinaryClipboard.SetData()
- kelas nonserialisable tidak dapat ditempatkan di clipboard.MarshalByRefObject
) harus serialisable.Ini adalah kasus penggunaan paling umum yang saya temui.
Karena pertanyaan aslinya adalah tentang SerializableAttribute, perlu dicatat bahwa atribut ini hanya berlaku ketika menggunakan BinaryFormatter atau SoapFormatter.
Agak membingungkan, kecuali Anda benar-benar memperhatikan detailnya, kapan menggunakannya dan apa tujuan sebenarnya.
Ini TIDAK ada hubungannya dengan serialisasi XML atau JSON.
Digunakan dengan SerializableAttribute adalah Antarmuka ISerializable dan Kelas SerializationInfo. Ini juga hanya digunakan dengan BinaryFormatter atau SoapFormatter.
Kecuali jika Anda bermaksud membuat serial kelas Anda menggunakan Biner atau Sabun, jangan repot-repot menandai kelas Anda sebagai [Serializable]. Serializer XML dan JSON bahkan tidak menyadari keberadaannya.
Serializable
, dan tanpa ketika atribut itu dihapus. Jadi beberapa gangguan mungkin terjadi.
Serialisasi adalah proses mengubah objek menjadi aliran byte untuk menyimpan objek atau mengirimkannya ke memori, database, atau file.
Bagaimana Serialisasi Bekerja
Ilustrasi ini menunjukkan keseluruhan proses serialisasi.
Objek serial ke aliran, yang tidak hanya membawa data, tetapi informasi tentang jenis objek, seperti versi, budaya, dan nama rakitan. Dari aliran itu, dapat disimpan dalam database, file, atau memori.
Ini adalah contoh singkat tentang bagaimana serialisasi bekerja. Saya juga belajar tentang hal yang sama dan saya menemukan dua tautan bermanfaat. Apa Serialisasi dan bagaimana hal itu dapat dilakukan dalam . NET .
Program sampel yang menjelaskan serialisasi
Jika Anda tidak memahami program di atas, banyak program sederhana dengan penjelasan diberikan di sini .
Serialisasi
Serialisasi adalah proses mengubah suatu objek atau satu set objek grafik menjadi aliran, itu adalah array byte dalam kasus serialisasi biner
Penggunaan Serialisasi
Di bawah ini adalah beberapa atribut khusus yang berguna yang digunakan selama serialisasi suatu objek
[Serializable] -> Digunakan ketika kita menandai serializable objek [NonSerialized] -> Ini digunakan ketika kita tidak ingin membuat serialisasi bidang objek. [OnSerializing] -> Digunakan ketika kita ingin melakukan beberapa aksi saat membuat serial objek [OnSerialized] -> Ini digunakan ketika kita ingin melakukan beberapa tindakan setelah membuat serial objek pada aliran.
Di bawah ini adalah contoh serialisasi
[Serializable]
internal class DemoForSerializable
{
internal string Fname = string.Empty;
internal string Lname = string.Empty;
internal Stream SerializeToMS(DemoForSerializable demo)
{
DemoForSerializable objSer = new DemoForSerializable();
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, objSer);
return ms;
}
[OnSerializing]
private void OnSerializing(StreamingContext context) {
Fname = "sheo";
Lname = "Dayal";
}
[OnSerialized]
private void OnSerialized(StreamingContext context)
{
// Do some work after serialized object
}
}
Ini kode panggilannya
class Program
{
string fname = string.Empty;
string Lname = string.Empty;
static void Main(string[] args)
{
DemoForSerializable demo = new DemoForSerializable();
Stream ms = demo.SerializeToMS(demo);
ms.Position = 0;
DemoForSerializable demo1 = new BinaryFormatter().Deserialize(ms) as DemoForSerializable;
Console.WriteLine(demo1.Fname);
Console.WriteLine(demo1.Lname);
Console.ReadLine();
}
}
What is it?
stackoverflow.com/questions/3429921/what-does-serializable-mean