Semua Tentang Serializing dalam Visual Basic

click fraud protection

Serialisasi adalah proses mengubah objek menjadi urutan linier byte disebut "aliran byte." Deserialisasi hanya membalikkan proses. Tetapi mengapa Anda ingin mengubah objek menjadi aliran byte?

Alasan utamanya adalah agar Anda dapat memindahkan objek. Pertimbangkan kemungkinannya. Karena "semuanya adalah objek" di .NET, Anda dapat membuat serial apa saja dan menyimpannya ke file. Jadi Anda bisa membuat serial gambar, file data, status modul program saat ini ('status' seperti a snapshot program Anda pada suatu titik waktu sehingga Anda dapat menunda sementara eksekusi dan mulai lagi kemudian)... apapun yang perlu kamu lakukan.

Anda juga dapat menyimpan objek-objek ini pada disk dalam file, mengirimkannya melalui web, meneruskannya ke program lain, menyimpan salinan cadangan untuk keselamatan atau keamanan. Kemungkinannya secara harfiah tidak terbatas.

Itu sebabnya serialisasi adalah proses kunci dalam. NET dan Dasar visual. Di bawah ini adalah bagian tentang serialisasi khusus dengan menerapkan ISerializable antarmuka dan pengkodean a Baru dan a GetObjectDatasubrutin.

instagram viewer

Sebagai contoh pertama dari serialisasi, mari kita lakukan salah satu program termudah, tetapi juga salah satu yang paling berguna: membuat serialisasi data, dan kemudian deserialisasi data dalam kelas sederhana ke dan dari file. Dalam contoh ini, data tidak hanya serial, tetapi struktur data juga disimpan. Struktur di sini dinyatakan dalam modul untuk menjaga... baik... tersusun.

Modul SerializeParms
ParmExample Kelas Publik
Public Parm1Name As String = "Parm1 Name"
Public Parm1Value As Integer = 12345
Parm2Name Publik Sebagai String
Parm2Value Publik Sebagai Desimal
Kelas Akhir
Modul Akhir

Kemudian, nilai individual dapat disimpan ke file seperti ini:

Sistem Impor. Runtime. Serialisasi. Pemformat. Biner
Sistem Impor. IO
Formulir Kelas Publik1
Sub Pribadi mySerialize_Click (_
Pengirim ByVal Sebagai Sistem. Objek, _
ByVal e As System. EventArgs) _
Menangani mySerialize. Klik
Dim ParmData Sebagai ParmExample Baru
ParmData. Parm2Name = "Nama Parm2"
ParmData. Nilai Parm2 = 54321.12345
Dim s Sebagai FileStream Baru ("ParmInfo", FileMode. Membuat)
Dim f Sebagai BinaryFormatter Baru
f. Serialize (s, ParmData)
s. Menutup()
End Sub
Kelas Akhir

Dan nilai-nilai yang sama dapat diambil seperti ini:

Sistem Impor. Runtime. Serialisasi. Pemformat. Biner
Sistem Impor. IO
Formulir Kelas Publik1
Sub Pribadi myDeserialize_Click (_
Pengirim ByVal Sebagai Sistem. Objek, _
ByVal e As System. EventArgs) _
Menangani myDeserialize. Klik
Redup = FileStream Baru ("ParmInfo", FileMode. Buka)
Dim f Sebagai BinaryFormatter Baru
Redupkan Dipulihkan Sebagai Parm Baru Contoh
RestoredParms = f. Deserialize
s. Menutup()
Menghibur. WriteLine (RestoredParms. Parm1Name)
Menghibur. WriteLine (RestoredParms. Nilai Parm1)
Menghibur. WriteLine (RestoredParms. Parm2Name)
Menghibur. WriteLine (RestoredParms. Nilai Parm2)
End Sub
Kelas Akhir

SEBUAH Struktur atau koleksi (seperti ArrayList) daripada a Kelas bisa juga serial ke file dengan cara yang sama.

Sekarang kita telah membahas proses pembuatan serial dasar, mari kita lihat detail spesifik yang merupakan bagian dari proses di halaman selanjutnya.

Salah satu hal pertama yang harus Anda perhatikan tentang contoh ini adalah atribut dalam Kelas. Atribut hanya informasi lebih lanjut yang dapat Anda berikan kepada VB.NET tentang suatu objek dan mereka digunakan untuk banyak hal yang berbeda. Atribut dalam kode ini memberi tahu VB.NET untuk menambahkan kode tambahan sehingga nantinya, semua yang ada di kelas ini dapat diserialisasi.

Jika ada item spesifik di Kelas yang Anda jangan ingin diserialisasi, Anda dapat menggunakan atribut untuk mengecualikan mereka:

Public Parm3Value As String = "Apapun"

Dalam contoh tersebut, perhatikan itu Serialkan dan Deserialize adalah metode BinaryFormatter objek (f dalam contoh ini).

f. Serialize (s, ParmData)

Objek ini mengambil FileStream objek dan objek yang akan diserialisasi sebagai parameter. Kita akan melihat bahwa VB.NET menawarkan objek lain yang memungkinkan hasilnya diekspresikan sebagai XML.

Dan satu catatan terakhir, jika objek Anda termasuk objek bawahan lainnya, mereka akan diserialisasi juga! Tapi sejak itu semua objek yang diserialisasi harus ditandai dengan atribut, semua objek anak ini harus ditandai juga.

Agar benar-benar jelas tentang apa yang terjadi dalam program Anda, Anda mungkin ingin menampilkan nama file ParmData di Notepad untuk melihat seperti apa data serial itu. (Jika Anda mengikuti kode ini, itu harus di tempat sampah. Debug folder di proyek Anda.) Karena ini adalah file biner, sebagian besar konten tidak dapat dibaca teks, tetapi Anda harus dapat melihat string apa pun dalam file serial Anda. Kami akan melakukan versi XML berikutnya dan Anda mungkin ingin membandingkan keduanya hanya untuk mengetahui perbedaannya.

Serialisasi ke XML dan bukan file biner membutuhkan sedikit perubahan. XML tidak secepat dan tidak dapat menangkap beberapa informasi objek, tetapi jauh lebih fleksibel. XML dapat digunakan oleh hampir semua teknologi perangkat lunak lain di dunia saat ini. Jika Anda ingin memastikan struktur file Anda tidak "mengikat Anda ke dalam" Microsoft, ini adalah pilihan yang baik untuk memeriksa. Microsoft menekankan "LINQ to XML" untuk membuat file data XML dalam teknologi terbaru mereka, tetapi banyak orang masih lebih suka metode ini.

Tanda 'X' di XML singkatan dari eXmasuk akal. Dalam contoh XML kami, kami akan menggunakan salah satu ekstensi XML itu, teknologi yang disebut SABUN MANDI. Ini dulu berarti "Protokol Akses Objek Sederhana" tetapi sekarang hanya nama. (SABUN telah ditingkatkan sedemikian rupa sehingga nama aslinya tidak pas lagi.)

Hal utama yang harus kita ubah dalam subrutin kami adalah declation dari formatter serialisasi. Ini harus diubah di kedua subrutin yang membuat serial objek dan deserialisasi lagi. Untuk konfigurasi default, ini melibatkan tiga perubahan pada program Anda. Pertama, Anda harus menambahkan Referensi ke proyek. Klik kanan proyek dan pilih Tambahkan Referensi .... Yakinkan ...

Sistem. Runtime. Serialisasi. Pemformat. Sabun mandi

... telah ditambahkan ke proyek.

Kemudian ubah dua pernyataan dalam program yang merujuknya.

Sistem Impor. Runtime. Serialisasi. Pemformat. Sabun mandi
Dim f Sebagai Sabun Sabun Baru

Kali ini, jika Anda memeriksa yang sama ParmData file di Notepad, Anda akan melihat bahwa semuanya dalam teks XML yang dapat dibaca seperti ...

Nama Parm1
12345
Nama Parm2
54321.12345

Ada juga banyak XML tambahan di sana yang diperlukan untuk standar SOAP dalam file juga. Jika Anda ingin memverifikasi apa itu Atribut tidak, Anda dapat menambahkan variabel dengan atribut itu dan melihat file untuk memverifikasi bahwa itu tidak termasuk.

Contoh yang baru saja kami kodekan adalah data bersambung, tetapi anggaplah Anda perlu mengontrol bagaimana data tersebut diserialisasi. VB.NET dapat melakukannya juga!

Untuk mencapai ini, Anda perlu sedikit lebih dalam ke konsep serialisasi. VB.NET memiliki objek baru untuk membantu di sini: SerializationInfo. Meskipun Anda memiliki kemampuan untuk mengkode perilaku serialisasi kustom, ia datang dengan biaya pengkodean tambahan.

Dasar tambahan kode ditunjukkan di bawah ini. Ingat, kelas ini digunakan sebagai ganti ParmExample kelas ditunjukkan pada contoh sebelumnya. Ini bukan contoh lengkap. Tujuannya adalah untuk menunjukkan kepada Anda kode baru yang diperlukan untuk serialisasi khusus.

Sistem Impor. Runtime. Serialisasi
_
Kustomisasi Kelas Publik
Implementasi ISerializable
'data akan diserialisasi di sini
'Serial PublikVariabel sebagai Jenis
Sub Publik Baru ()
'konstruktor default ketika kelas
'dibuat - kode kustom dapat berupa
'ditambahkan di sini juga
End Sub
Sub Publik Baru (_
ByVal info As SerializationInfo, _
Konteks ByVal Sebagai StreamingContext)
'inisialisasi variabel program Anda dari
'toko data serial
End Sub
Sub Publik GetObjectData (_
ByVal info As SerializationInfo, _
Konteks ByVal Sebagai StreamingContext) _
Implementasi ISerializable. GetObjectData
Perbarui penyimpanan data berseri
'dari variabel program
End Sub
Kelas Akhir

Idenya adalah bahwa sekarang Anda dapat (dan, pada kenyataannya, Anda harus) melakukan semua pembaruan dan pembacaan data di penyimpanan data berseri di Baru dan GetObjectData subrutin. Anda juga harus menyertakan obat generik Baru konstruktor (tidak ada daftar parameter) karena Anda mengimplementasikan antarmuka.

Kelas biasanya akan memiliki sifat formal dan metode yang dikodekan juga ...

'Properti Generik
Private newPropertyValue As String
Public Property NewProperty () As String
Dapatkan
Kembalikan Nilai Properti baru
End Get
Set (Nilai ByVal Sebagai String)
newPropertyValue = nilai
Set Akhir
Akhiri Properti
'Metode Generik
Sub Public MyMethod ()
'kode metode
End Sub

Kelas serialisasi yang dihasilkan dapat membuat nilai unik dalam file berdasarkan kode yang Anda berikan. Misalnya, kelas real estat mungkin memperbarui nilai dan alamat rumah tetapi kelas tersebut akan membuat serialisasi klasifikasi pasar yang dihitung juga.

Itu Baru subrutin akan terlihat seperti ini:

Sub Publik Baru (_
ByVal info As SerializationInfo, _
Konteks ByVal Sebagai StreamingContext)
'inisialisasi variabel program Anda dari
'toko data serial
Parm1Name = info. GetString ("a")
Parm1Value = info. GetInt32 ("b")
'Sub baru berlanjut ...

Kapan Deserialize disebut pada a BinaryFormatter objek, sub ini dieksekusi dan a SerializationInfo objek dilewatkan ke Baru subrutin. Baru kemudian dapat melakukan apa pun yang diperlukan dengan nilai data serial. Sebagai contoh ...

MsgBox ("Ini adalah Parm1Value Times Pi:" _
& (Nilai Parm1Value * Matematika. PI) .ToString)

Kebalikannya terjadi ketika Serialkan disebut, tetapi BinaryFormatter panggilan objek GetObjectData sebagai gantinya.

Sub Publik GetObjectData (_
ByVal info As SerializationInfo, _
Konteks ByVal Sebagai StreamingContext) _
Implementasi ISerializable. GetObjectData
Perbarui penyimpanan data berseri
'dari variabel program
If Parm2Name = "Test" Lalu
info AddValue ("a", "Ini adalah ujian.")
Lain
info AddValue ("a", "Tidak ada tes saat ini.")
Berakhir jika
info AddValue ("b", 2)

Perhatikan bahwa data ditambahkan ke file serial sebagai pasangan nama / nilai.

Banyak halaman web yang saya temukan dalam menulis artikel ini sepertinya tidak memiliki kode kerja yang sebenarnya. Orang bertanya-tanya apakah penulis benar-benar mengeksekusi kode sebelum menulis artikel.

instagram story viewer