Sve o serializaciji u Visual Basic

click fraud protection

Serijalizacija je proces pretvaranja objekta u linearni slijed bajtova naziva "stream byte". Deserializacija samo preokreće proces. Ali zašto biste željeli pretvoriti objekt u tok bajtova?

Glavni razlog je taj što možete kretati objekt okolo. Razmotrite mogućnosti. Budući da je "sve objekt" u .NET-u, možete serializirati bilo što i spremiti ga u datoteku. Tako biste mogli serializirati slike, datoteke s podacima, trenutno stanje programskog modula ('stanje' je poput a trenutni snimak vašeg programa tako da možete privremeno obustaviti izvršenje i pokrenuti ponovo kasnije)... što god trebate učiniti.

Te objekte također možete pohraniti na disk u datoteke, poslati ih putem weba, proslijediti ih drugom programu, zadržati sigurnosnu kopiju radi sigurnosti ili sigurnosti. Mogućnosti su doslovno beskrajne.

Zato je serializacija tako ključan proces u .NET i Visual Basic. Ispod je odjeljak o prilagođenoj serializaciji primjenom ISerializable sučelje i kodiranje a Novi i a GetObjectDatapotprogram.

Kao prvi primjer serializacije napravimo jedan od najlakših programa, ali i jedan od najkorisnijih: serializiranje podataka, a zatim deserijaliziranje podataka u jednostavnom razredu u datoteku i iz nje. U ovom se primjeru podaci ne samo serializiraju, već se sprema i struktura podataka. Ovdje je struktura deklarirana u modulu za zadržavanje stvari... dobro... strukturiran.

instagram viewer

Modul SerializeParms
ParmExample javne klase
Public Parm1Name As String = "Ime Parm1"
Javna parm1Value kao cijeli broj = 12345
Javno parm2Name kao niz
Javna parm2Value kao decimalna
Krajnja klasa
Krajnji modul

Potom se pojedinačne vrijednosti mogu spremiti u datoteku poput ove:

Uvozni sustav. Runtime. Serialization. Formatters. Binarni
Uvozni sustav. IO
Oblik javne klase1
Privatni Sub mySerialize_Click (_
ByVal pošiljalac kao sustav. Objekt, _
ByVal e kao sustav. EventArgs) _
Rukuje mySerialize. Klik
Dim ParmData kao novi ParmExample
ParmData. Parm2Name = "Ime Parm2"
ParmData. Parm2Value = 54321.12345
Dim s New FileStream ("ParmInfo", FileMode. Stvoriti)
Dim f kao novi binarni format
f. Serijaliziranje (s, ParmData)
a. Zatvoriti()
Kraj Sub
Krajnja klasa

I te iste vrijednosti mogu se pronaći ovako:

Uvozni sustav. Runtime. Serialization. Formatters. Binarni
Uvozni sustav. IO
Oblik javne klase1
Privatni Sub myDeserialize_Click (_
ByVal pošiljalac kao sustav. Objekt, _
ByVal e kao sustav. EventArgs) _
Rukuje myDeserialize. Klik
Dim s = Nova FileStream ("ParmInfo", FileMode. Otvoren)
Dim f kao novi binarni format
Dim RestoredParms kao novi ParmExample
RestoreParms = f. Deserializirati
a. Zatvoriti()
Konzola. WriteLine (RestoreParms. Parm1Name)
Konzola. WriteLine (RestoreParms. Parm1Value)
Konzola. WriteLine (RestoreParms. Parm2Name)
Konzola. WriteLine (RestoreParms. Parm2Value)
Kraj Sub
Krajnja klasa

Struktura ili zbirku (poput an ArrayList) a ne klasa mogao se i na isti način serializirati u datoteku.

Sada kada smo prošli kroz osnovni postupak serializacije, pogledajmo specifične detalje koji su dio postupka na sljedećoj stranici.

Jedna od prvih stvari koje biste trebali primijetiti na ovom primjeru je atribut u klasa. Značajke samo su više informacija koje možete pružiti VB.NET-u o nekom objektu i oni se koriste za mnogo različitih stvari. Atribut u ovom kodu govori VB.NET-u da doda dodatni kod kako bi se kasnije sve u ovoj klasi moglo serializirati.

Ako u razredu postoje određene stavke koje vi nemoj želite serializirati, možete upotrijebiti atribut da ih isključite:

Public Parm3Value As String = "Što god"

U primjeru je to obavijest emitovati u nastavcima i deserialize su metode BinaryFormatter objekt (f u ovom primjeru).

f. Serijaliziranje (s, ParmData)

Ovaj objekt uzima FileStream objekta i objekta koji se mora serializirati kao parametre. Vidjet ćemo da VB.NET nudi još jedan objekt koji omogućava da se rezultat izrazi kao XML.

I još jedna zadnja napomena, ako vaš objekt uključuje i druge podređene objekte, oni će biti serijski! Ali otkad svi predmeti koji su serializirani mora biti označen s atribut, svi ti podređeni objekti moraju biti označeni i na taj način.

Da biste bili potpuno jasni u onome što se događa u vašem programu, možda biste trebali prikazati datoteku pod nazivom ParmData u Notepadu da biste vidjeli kako izgledaju serializirani podaci. (Ako ste slijedili ovaj kôd, trebao bi biti u smeće. otkloniti neispravnost mapa u vašem projektu.) Budući da je ovo binarna datoteka, većina sadržaja nije čitljiv tekst, ali trebali biste moći vidjeti bilo kakve žice u serializiranoj datoteci. Dalje ćemo napraviti XML verziju, a možda biste željeli usporediti ove dvije kako biste bili svjesni razlike.

Serijalizacija u XML umjesto binarne datoteke zahtijeva vrlo malo promjena. XML nije tako brz i ne može zabilježiti neke podatke o objektu, ali puno je fleksibilniji. XML danas se može koristiti gotovo bilo kojom drugom softverskom tehnologijom u svijetu. Ako želite biti sigurni da vas strukture datoteka ne "vezuju" za Microsoft, ovo je dobra opcija koju trebate pogledati. Microsoft naglašava "LINQ to XML" za stvaranje XML datoteka s podacima o njihovoj najnovijoj tehnologiji, ali mnogi ljudi još uvijek preferiraju ovu metodu.

"X" u XML zalaže se za extensible. U našem primjeru XML koristit ćemo jedno od tih proširenja XML-a, tehnologije koja se zove SAPUN. Nekada je to značilo "Jednostavan protokol pristupa objektu", ali sada je to samo ime. (SOAP je toliko nadograđen da originalni naziv više ne odgovara.)

Glavna stvar koju moramo promijeniti u svojim potprogramima je deklaracija formata serializacije. To se mora promijeniti i u podprogramu koji serijski vrši objekt, i u onom koji ga ponovno deserijalizira. Za zadanu konfiguraciju to uključuje tri promjene vašeg programa. Prvo, projektu morate dodati referencu. Desnom tipkom miša kliknite projekt i odaberite Dodaj referencu .... Budi siguran ...

Sustav. Runtime. Serialization. Formatters. Sapun

... dodan je projektu.

Zatim promijenite dvije izjave u programu koji ga referencira.

Uvozni sustav. Runtime. Serialization. Formatters. Sapun
Dim f kao novi SoapFormatter

Ovaj put ako provjerite isto ParmData Datoteka u Notepadu, vidjet ćete da je cijela stvar u čitljivom XML tekstu, kao što je ...

Naziv Parm1
12345
Naziv Parm2
54321.12345

Tu je i puno dodatnih XML-a koji su potrebni i za SOAP standard u datoteci. Ako želite provjeriti što atribut ima, možete dodati varijablu s tim atributom i pogledati datoteku da biste provjerili da nije uključena.

Primjer koji smo upravo kodirali samo je serijski podatke, ali pretpostavimo da morate kontrolirati kako se podaci serializiraju. VB.NET mogu i to!

Da biste to postigli, morate se malo dublje pozabaviti konceptom serializacije. VB.NET ima novi objekt koji vam ovdje pomaže: SerializationInfo. Iako imate mogućnost kodiranja prilagođenog ponašanja u serializaciji, to dolazi s troškom dodatnog kodiranja.

Osnovni ekstra kôd je prikazan dolje. Upamtite da se ova klasa koristi umjesto ParmExample klasa prikazana u ranijem primjeru. Ovo nije potpuni primjer. Svrha je pokazati vam novi kôd koji je potreban za prilagođenu serializaciju.

Uvozni sustav. Runtime. serialization
_
Prilagođavanje javne klase
Provodi ISerializable
'podaci se ovdje serializiraju
'Javna SerializedVariable kao vrsta
Javno pod-novo ()
'zadani konstruktor kada je klasa
'stvoreno - prilagođeni kod može biti
'dodano je i ovdje
Kraj Sub
Javno pod-novo (_
Informacije ByVal-a Kao SerializationInfo, _
Kontekst ByVal-a kao StreamingContext)
'inicijalizirajte svoje varijable u programu
'serializirano spremište podataka
Kraj Sub
Javni pod GetObjectData (_
Informacije ByVal-a Kao SerializationInfo, _
ByVal kontekst kao StreamingContext) _
Provodi ISerializable. GetObjectData
'ažuriranje serializiranog spremišta podataka
'od programskih varijabli
Kraj Sub
Krajnja klasa

Ideja je da sad to možete (i u stvari i vi) mora) obaviti sve ažuriranje i čitanje podataka u serializiranom spremištu podataka u Novi i GetObjectData potprograme. Morate uključiti i generičko Novi konstruktor (nema popisa parametara) jer implementirate sučelje.

Klasa će obično imati i formalna svojstva i metode kodirane ...

'Generičko vlasništvo
Privatna novaPropertyValue kao niz
Novo vlasništvo javnog vlasništva () kao niz
Dobiti
Vrati novuPropertyValue
Kraj Get
Postavi (ByVal vrijednost kao niz)
newPropertyValue = vrijednost
Završni skup
Kraj imovine
'Generička metoda
Javni pod MyMethod ()
'kod metode
Kraj Sub

Rezultirajuća serializirana klasa može stvoriti jedinstvene vrijednosti u datoteci na temelju koda koji dobavljate. Na primjer, klasa nekretnina može ažurirati vrijednost i adresu kuće, ali klasa bi serializirala i izračunatu tržišnu klasifikaciju.

Novi podprogram će izgledati ovako:

Javno pod-novo (_
Informacije ByVal-a Kao SerializationInfo, _
Kontekst ByVal-a kao StreamingContext)
'inicijalizirajte svoje varijable u programu
'serializirano spremište podataka
Parm1Name = informacije. GetString ( "a"),
Parm1Value = informacije. GetInt32 ( "b")
'Novi podmjeru se nastavlja ...

Kada deserialize poziva se na a BinaryFormatter objekta, izvršava se ovaj pod i a SerializationInfo objekt se prosljeđuje na Novi potprogram. Novi tada može napraviti sve što je potrebno sa serializiranim vrijednostima podataka. Na primjer ...

MsgBox ("Ovo je Parm1Value Times Pi:" _
& (Parm1Value * Matematika PI) .ToString)

Obrnuto se događa kada emitovati u nastavcima zove se, ali BinaryFormatter objektni pozivi GetObjectData umjesto toga.

Javni pod GetObjectData (_
Informacije ByVal-a Kao SerializationInfo, _
ByVal kontekst kao StreamingContext) _
Provodi ISerializable. GetObjectData
'ažuriranje serializiranog spremišta podataka
'od programskih varijabli
Ako je Parm2Name = "Test" Tada
info. AddValue ("a", "Ovo je test.")
Drugo
info. AddValue ("a", "Ovaj put nema testiranja.")
Završi ako
info. AddValue ("b", 2)

Primijetite da su podaci dodani u serializiranu datoteku kao parovi imena / vrijednosti.

Mnogo web stranica koje sam pronašao u pisanju ovog članka izgleda da nemaju stvarni radni kod. Čovjek se pita je li autor zapravo izveo neki kod prije pisanja članka.

instagram story viewer