Visual Basic'te Serileştirme Hakkında Her Şey

Serileştirme, bir nesneyi doğrusal bir diziye dönüştürme işlemidir. bayt "bayt akışı" olarak adlandırılır. Serileştirme sadece süreci tersine çevirir. Ama neden bir nesneyi bir bayt akışına dönüştürmek istersiniz?

Ana sebep, nesneyi hareket ettirebilmenizdir. Olanakları düşünün. .NET'te "her şey bir nesne" olduğundan, her şeyi serileştirebilir ve bir dosyaya kaydedebilirsiniz. Böylece resimleri, veri dosyalarını serileştirebilirsiniz, bir program modülünün mevcut durumu ('durum' bir geçici olarak yürütmeyi askıya alıp yeniden başlayabilmeniz için programınızın anlık görüntüsü sonra)... ne yapmanız gerekiyorsa.

Ayrıca bu nesneleri diskte dosyalarda saklayabilir, web üzerinden gönderebilir, farklı bir programa aktarabilir, güvenlik veya güvenlik için yedek bir kopya tutabilirsiniz. Olanaklar tam anlamıyla sonsuzdur.

Bu yüzden serileştirme .NET ve Visual Basic. Aşağıda, özel serileştirme hakkında ıserializable arayüz ve kodlama Yeni ve bir GetObjectDataaltyordamı.

Serileştirmenin ilk örneği olarak, en kolay programlardan birini, aynı zamanda en kullanışlı programlardan birini yapalım: Verilerin serileştirilmesi ve daha sonra bir dosyaya ve dosyadan basit sınıftaki verilerin serileştirilmesi. Bu örnekte, veriler sadece serileştirilmiş olmakla kalmaz, verilerin yapısı da kaydedilir. Buradaki yapı, bir şeyleri saklamak için bir modülde ilan edildi... iyi... yapılandırılmış.

instagram viewer

Modül SerializeParms
Genel Sınıf ParmExample
Public Parm1Name As String = "Parm1 Adı"
Tam Sayı Olarak Genel Parm1Değer = 12345
Dize Olarak Genel Parm2Name
Genel Parm2Değeri Ondalık Olarak
Bitiş Sınıfı
Bitiş Modülü

Ardından, tek tek değerler şöyle bir dosyaya kaydedilebilir:

İthalat Sistemi. Çalışma süresi. Serileştirme. Biçemleyicileri. İkili
İthalat Sistemi. IO
Genel Sınıf Formu1
Özel Alt mySerialize_Click (_
ByVal gönderici As System. Nesne, _
ByVal e As Sistemi. EventArgs) _
MySerialize ile çalışır. Tıklayın
ParmData'yı Yeni Parm Olarak Örnekle
ParmData. Parm2Name = "Parm2 Adı"
ParmData. Parm2Değer = 54321.12345
Dim s As Yeni FileStream ("ParmInfo", FileMode. Oluşturmak)
Dim f Yeni İkili Biçimlendirici Olarak
f. Serialize (s, ParmData)
s. Kapat()
End Sub
Bitiş Sınıfı

Ve aynı değerler şu şekilde alınabilir:

İthalat Sistemi. Çalışma süresi. Serileştirme. Biçemleyicileri. İkili
İthalat Sistemi. IO
Genel Sınıf Formu1
Özel Alt myDeserialize_Click (_
ByVal gönderici As System. Nesne, _
ByVal e As Sistemi. EventArgs) _
MyDeserialize ile çalışır. Tıklayın
Dim s = Yeni FileStream ("ParmInfo", FileMode. Açık)
Dim f Yeni İkili Biçimlendirici Olarak
Dim RestoredParms Yeni Parm Olarak Örnek
RestoredParms = f. Seriyi kaldır
s. Kapat()
Konsol. WriteLine (Geri YüklendiParms. Parm1Name)
Konsol. WriteLine (Geri YüklendiParms. Parm1Value)
Konsol. WriteLine (Geri YüklendiParms. Parm2Name)
Konsol. WriteLine (Geri YüklendiParms. Parm2Value)
End Sub
Bitiş Sınıfı

bir yapı veya bir koleksiyon ( ArrayList) yerine Sınıf aynı şekilde bir dosyaya serileştirilebilir.

Şimdi temel serileştirme sürecine geçtik, bir sonraki sayfada sürecin bir parçası olan belirli ayrıntılara bakalım.

Bu örnek hakkında ilk dikkat etmeniz gereken şeylerden biri özelliği Sınıf. Öznitellikler VB.NET'e bir nesne hakkında verebileceğiniz daha fazla bilgidir ve bunlar birçok farklı şey için kullanılır. Bu koddaki öznitelik, daha sonra bu sınıftaki her şeyin serileştirilebilmesi için VB.NET'e ekstra kod eklemesini söyler.

Sınıfta sizin yok serileştirmek istiyorsanız, bunları hariç tutma özelliği:

Public Parm3Value As String = "Ne olursa olsun"

Örnekte, uyarı şu ki serialize ve Deserialize yöntemleri BinaryFormatter nesne (f bu örnekte).

f. Serialize (s, ParmData)

Bu nesne Dosya akışı nesne ve parametre olarak serileştirilecek nesne. VB.NET'in sonucun XML olarak ifade edilmesine izin veren başka bir nesne sunduğunu göreceğiz.

Ve son bir not, eğer nesneniz başka bağımlı nesneler içeriyorsa, bunlar da serileştirilecektir! Ama beri herşey serileştirilmiş nesneler zorunlu ile işaretlenmek Bu alt nesnelerin tümü de bu şekilde işaretlenmelidir.

Programınızda neler olduğu hakkında tamamen net olmak için, adlı dosyayı görüntülemek isteyebilirsiniz. ParmData Serileştirilmiş verilerin neye benzediğini görmek için Not Defteri'nde. (Bu kodu izlediyseniz, kodun çöp Kutusu. Hata ayıklama ) Bu bir ikili dosya olduğundan, içeriğin çoğu okunabilir metin değildir, ancak serileştirilmiş dosyanızda herhangi bir dizeyi görebilmeniz gerekir. Bundan sonra bir XML sürümü yapacağız ve farkın farkında olmak için ikisini karşılaştırmak isteyebilirsiniz.

İkili dosya yerine XML'e seri oluşturmak için çok az değişiklik yapılması gerekir. XML o kadar hızlı değildir ve bazı nesne bilgilerini yakalayamaz, ancak çok daha esnektir. XML bugün dünyadaki diğer tüm yazılım teknolojileri tarafından kullanılabilir. Dosya yapılarınızın Microsoft'a "bağlanmadığından" emin olmak istiyorsanız, bu iyi bir seçenektir. Microsoft, en son teknolojilerinde XML veri dosyaları oluşturmak için "XML'den LINQ'a" seçeneğini vurgulamaktadır, ancak birçok kişi bu yöntemi hala tercih etmektedir.

'X' XML e anlamına gelirXgerilebilir. XML örneğimizde, şu XML uzantılarından birini, SABUN. Bu "Basit Nesne Erişim Protokolü" anlamına geliyordu ama şimdi sadece bir isim. (SOAP, o kadar çok yükseltildi ki orijinal ad artık buna pek uymuyor.)

Alt programlarımızda değiştirmek zorunda olduğumuz ana şey, serileştirme formatlayıcısının beyanıdır. Bu, hem nesneyi serileştiren altyordamda hem de onu tekrar serileştiren alt programda değiştirilmelidir. Varsayılan yapılandırma için bu, programınızda üç değişiklik içerir. İlk olarak, projeye bir Referans eklemeniz gerekir. Projeyi sağ tıklayın ve Referans ekle .... Emin olmak ...

Sistemi. Çalışma süresi. Serileştirme. Biçemleyicileri. Sabun

... projeye eklendi.

Ardından, programda buna başvuran iki ifadeyi değiştirin.

İthalat Sistemi. Çalışma süresi. Serileştirme. Biçemleyicileri. Sabun
Dim f Yeni Sabun Biçimlendirici Olarak

Bu sefer, aynı şeyi kontrol ederseniz ParmData Not Defteri'nde, her şeyin okunabilir XML metninde olduğunu göreceksiniz ...

Parm1 Adı
12345
Parm2 Adı
54321.12345

Ayrıca dosyadaki SOAP standardı için gerekli olan birçok ek XML de var. Ne olduğunu doğrulamak istiyorsanız özniteliği yaparsa, bu özniteliğe bir değişken ekleyebilir ve dahil olmadığını doğrulamak için dosyaya bakabilirsiniz.

Sadece verileri kodladık, ancak verilerin nasıl serileştirildiğini kontrol etmeniz gerektiğini varsayalım. VB.NET bunu da yapabilir!

Bunu başarmak için serileştirme kavramını biraz daha derinleştirmeniz gerekir. VB.NET'in burada yardımcı olacak yeni bir nesnesi var: SerializationInfo. Özel serileştirme davranışını kodlama yeteneğiniz olsa da, ekstra bir kodlama maliyeti ile birlikte gelir.

Basit ekstra kodu aşağıda gösterilmiştir. Unutmayın, bu sınıf ParmExample Önceki örnekte gösterilen sınıf. Bu tam bir örnek değil. Amaç, özel serileştirme için gerekli olan yeni kodu göstermektir.

İthalat Sistemi. Çalışma süresi. serileştirme
_
Genel Sınıf CustomSerialization
Sürdürülebilirliği uygular
'burada serileştirilecek veriler
'Herkese Açık Seri
Herkese Açık Alt Yeni ()
'varsayılan yapıcı sınıf
'oluşturuldu - özel kod oluşturulabilir
buraya da eklendi
End Sub
Herkese Açık Alt Yeni (_
ByVal bilgisi SerializationInfo olarak, _
ByVal bağlamı StreamingContext olarak)
'program değişkenlerinizi
'serileştirilmiş bir veri deposu
End Sub
Genel Alt GetObjectData (_
ByVal bilgisi SerializationInfo olarak, _
ByVal bağlamı StreamingContext olarak) _
ISerializable uygular. GetObjectData
'serileştirilmiş veri deposunu güncelleme
'program değişkenlerinden
End Sub
Bitiş Sınıfı

Fikir şu ki yapabilirsin (ve aslında zorunlu) verilerin serileştirilmiş veri deposundaki tüm güncelleme ve okuma işlemlerini Yeni ve GetObjectData altyordamlar. Ayrıca genel bir Yeni yapıcısı (parametre listesi yok) çünkü bir arayüz uyguluyorsunuz.

Sınıf normal olarak kodlanmış resmi özelliklere ve yöntemlere sahip olacaktır ...

'Genel Mülkiyet
Private newPropertyValue As Dize
Dize Olarak Ortak Mülkiyet NewProperty ()
Almak
NewPropertyValue döndür
Son Alın
Set (ByVal değeri Dize Olarak)
newPropertyValue = değer
Bitiş Seti
Son Özellik
'Genel Yöntem
Genel Alt MyMethod ()
'yöntem kodu
End Sub

Sonuçta elde edilen serileştirilmiş sınıf, sağladığınız koda göre dosyada benzersiz değerler oluşturabilir. Örneğin, bir gayrimenkul sınıfı bir evin değerini ve adresini güncelleyebilir, ancak sınıf hesaplanmış bir piyasa sınıflandırmasını da serileştirir.

Yeni altyordam şöyle görünecektir:

Herkese Açık Alt Yeni (_
ByVal bilgisi SerializationInfo olarak, _
ByVal bağlamı StreamingContext olarak)
'program değişkenlerinizi
'serileştirilmiş bir veri deposu
Parm1Name = bilgi. ( "A") getString
Parm1Value = bilgi. GetInt32 ( "b"),
'Yeni sub devam ediyor ...

Ne zaman Deserialize denir BinaryFormatter nesne, bu alt yürütülür ve bir SerializationInfo nesne Yeni altyordamı. Yeni sonra serileştirilmiş veri değerleri ile ne gerekiyorsa yapabilir. Örneğin ...

MsgBox ("Bu Parm1Value Times Pi:" _
& (Parm1Value * Matematik. PI) .ToString)

Tersi, serialize denir, ancak BinaryFormatter nesne çağrıları GetObjectData yerine.

Genel Alt GetObjectData (_
ByVal bilgisi SerializationInfo olarak, _
ByVal bağlamı StreamingContext olarak) _
ISerializable uygular. GetObjectData
'serileştirilmiş veri deposunu güncelleme
'program değişkenlerinden
Parm2Name = "Test" ise
bilgi. AddValue ("a", "Bu bir testtir.")
Başka
bilgi. AddValue ("a", "Bu sefer test yok.")
End If
bilgi. Değer Ekle ("b", 2)

Verilerin serileştirilmiş dosyaya ad / değer çiftleri olarak eklendiğine dikkat edin.

Bu makaleyi yazarken bulduğum web sayfalarının çoğunda gerçek çalışma kodu yok gibi görünüyor. Makalenin bazen yazılmadan önce yazarın gerçekten herhangi bir kod yürütüp yürütmediğini merak eder.

instagram story viewer