Vse o serializaciji v Visual Basic

Serializacija je postopek pretvorbe predmeta v linearno zaporedje bajti imenovan "bajtni tok." Deserializacija proces samo obrne. Toda zakaj bi želeli predmet pretvoriti v bajtni tok?

Glavni razlog je, da lahko predmet premikate. Razmislite o možnostih. Ker je v .NET "vse predmet", lahko poljubno serializirate karkoli in ga shranite v datoteko. Tako bi lahko serijsko obdelali slike, podatkovne datoteke, trenutno stanje programskega modula ('stanje' je kot posnetek vašega programa v določenem času, tako da lahko začasno zaustavite izvajanje in začnete znova kasneje)... karkoli morate storiti.

Te predmete lahko na disk tudi shranite v datoteke, jih pošljete po spletu, jih prenesete v drug program, hranite varnostno kopijo za varnost ali zaščito. Možnosti so dobesedno neskončne.

Zato je serializacija tako ključen postopek v .NET in Visual basic. Spodaj je razdelek o serializaciji po meri z izvajanjem Izmerljivo vmesnik in kodiranje a Novo in a GetObjectDatapodprogram.

Kot prvi primer serializacije naredimo enega najlažjih programov, hkrati pa tudi enega najbolj uporabnih: serializacijo podatkov in nato deserializacijo podatkov v preprostem razredu v datoteko in iz nje. Podatki v tem primeru niso samo serializirani, ampak je shranjena tudi struktura podatkov. Struktura tukaj je navedena v modulu, da ohrani stvari... no... strukturiran.

instagram viewer

Modul SerializeParms
ParmExample javnega razreda
Public Parm1Name As String = "Ime Parm1"
Javni parm1Value kot celo število = 12345
Javni parm2Name kot niz
Javna Parm2Value kot decimalna
Končni razred
Končni modul

Nato lahko posamezne vrednosti shranite v takšno datoteko:

Uvozni sistem. Čas izvajanja. Serializacija. Oblikovalci. Binarni
Uvozni sistem. IO
Oblika javnega razreda1
Zasebni Sub mySerialize_Click (_
ByVal pošiljatelj kot sistem. Predmet, _
ByVal e As System. EventArgs) _
Ročaje mySerialize. Kliknite
Dim ParmData kot nov parmExample
ParmData. Parm2Name = "Ime Parm2"
ParmData. Parm2Value = 54321.12345
Dim s kot nov FileStream ("ParmInfo", FileMode. Ustvari)
Zatemni kot nov binarni formati
f. Poklic (s, ParmData)
s. Zapri ()
Končni pod
Končni razred

In te iste vrednosti je mogoče pridobiti tako:

Uvozni sistem. Čas izvajanja. Serializacija. Oblikovalci. Binarni
Uvozni sistem. IO
Oblika javnega razreda1
Zasebni Sub myDeserialize_Click (_
ByVal pošiljatelj kot sistem. Predmet, _
ByVal e As System. EventArgs) _
Ročaji myDeserialize. Kliknite
Dim s = New FileStream ("ParmInfo", FileMode. Odprto)
Zatemni kot nov binarni formati
Dim RestoredParms kot nov parmExample
RestoredParms = f. Deserializiraj
s. Zapri ()
Konzola. WriteLine (RestoreParms. Parm1Name)
Konzola. WriteLine (RestoreParms. Parm1Value)
Konzola. WriteLine (RestoreParms. Parm2Name)
Konzola. WriteLine (RestoreParms. Parm2Value)
Končni pod
Končni razred

A Struktura ali zbirko (na primer an ArrayList) namesto a Razred lahko tudi na enak način serializiramo v datoteko.

Zdaj, ko smo prešli osnovni postopek serializacije, poglejmo posebne podrobnosti, ki so del postopka na naslednji strani.

Ena prvih stvari, ki bi jih morali opaziti pri tem primeru, je atribut v Razred. Lastnosti so le več informacij, ki jih lahko posredujete VB.NET o predmetu in se uporabljajo za veliko različnih stvari. Atribut v tej kodi navaja VB.NET, naj doda dodatno kodo, tako da bo pozneje vse, kar je v tem razredu, lahko serijsko.

Če so v razredu določeni elementi, ki jih vi ne želite biti serijski, lahko uporabite atribut, da jih izključimo:

Public Parm3Value As String = "Karkoli"

V primeru je to obvestilo Serizirajte in Deserializirati so metode BinaryFormatter predmet (f v tem primeru).

f. Poklic (s, ParmData)

Ta predmet sprejme FileStream objekt in objekt, ki ga je treba serijsko spremeniti kot parametre. Videli bomo, da VB.NET ponuja še en objekt, ki omogoča, da se rezultat izrazi kot XML.

In še zadnja opomba, če vaš predmet vključuje druge podrejene predmete, bodo tudi ti serijsko zapisani! Ampak od takrat vse predmeti, ki so serializirani mora biti označen z atribut, vsi ti podrejeni predmeti morajo biti tudi na ta način označeni.

Če želite biti popolnoma jasni, kaj se dogaja v vašem programu, boste morda želeli prikazati datoteko z imenom ParmData v Notepadu, da vidite, kako izgledajo serializirani podatki. (Če ste upoštevali to kodo, bi morala biti v košara Odpravljanje napak mape v vašem projektu.) Ker gre za dvojiško datoteko, večina vsebine ni berljivega besedila, vendar bi morali imeti možnost, da vidite poljubne nize v vaši serijski datoteki. Naslednje bomo naredili različico XML in morda boste želeli primerjati obe, samo da bi se zavedali razlike.

Serializiranje v XML namesto v binarno datoteko zahteva zelo malo sprememb. XML ni tako hiter in ne more zajeti nekaterih podatkov o predmetu, vendar je veliko bolj prilagodljiv. XML lahko danes uporablja skoraj vsaka druga programska tehnologija na svetu. Če želite biti prepričani, da vas datoteke datotek ne "povezujejo v" Microsoft, je to dobra možnost, da se prepričate. Microsoft poudarja "LINQ to XML" za ustvarjanje podatkovnih datotek XML v njihovi najnovejši tehnologiji, vendar mnogi ljudje še vedno raje to metodo.

"X" v XML stoji za eXnapetosti V našem primeru XML bomo uporabili eno od teh razširitev XML, tehnologijo imenovano MALO. To je včasih pomenilo "Simple Protokol dostopa do objekta", zdaj pa je samo ime. (SOAP je bil toliko nadgrajen, da prvotno ime ne ustreza več tako.)

Glavna stvar, ki jo moramo spremeniti v svojih podprogramih, je deklaracija oblikovalnika serializacije. To je treba spremeniti tako v podprogrami, ki predmet serijsko izvaja, kot v tisti, ki jo ponovno deserializira. Pri privzeti konfiguraciji to vključuje tri spremembe vašega programa. Najprej morate projektu dodati referenco. Z desno miškino tipko kliknite projekt in izberite Dodaj referenco .... Poskrbi ...

Sistem. Čas izvajanja. Serializacija. Oblikovalci. Milo

... je bil dodan projektu.

Nato spremenite obe stavki v programu, ki ga navaja.

Uvozni sistem. Čas izvajanja. Serializacija. Oblikovalci. Milo
Dim f kot nov SoapFormatter

Tokrat, če preverite isto ParmData datoteko v Notepadu, boste videli, da je vsa stvar v berljivem XML besedilu, kot je ...

Ime Parm1
12345
Ime Parm2
54321.12345

Obstaja tudi veliko dodatnih XML, ki so potrebni tudi za standard SOAP v datoteki. Če želite preveriti, kaj je atribut, lahko dodate spremenljivko s tem atributom in si ogledate datoteko in preverite, ali ni vključena.

Primer, ki smo ga pravkar kodirali, je podatke samo serijsko obdelal, a predpostavimo, da morate nadzorovati, kako se podatki serializirajo. VB.NET lahko to tudi storim!

Če želite to doseči, se morate nekoliko bolj poglobiti v koncept serializacije. VB.NET ima tu nov objekt, ki vam bo pomagal: SerializationInfo. Čeprav imate možnost kodiranja vedenja po serializaciji po meri, prihaja do stroškov dodatnega kodiranja.

Osnovna dodatno koda je prikazana spodaj. Ne pozabite, da se ta razred uporablja namesto ParmExample razred, prikazan v prejšnjem primeru. To ni popoln primer. Namen je pokazati novo kodo, ki je potrebna za serijsko serijo po meri.

Uvozni sistem. Čas izvajanja. Serializacija
_
Prilagoditev v javnem razredu
Izvaja ISerializable
"podatki, ki jih je treba tukaj serijski
„Javna SerializedVariable kot tip
Javno pod novo ()
'privzeti konstruktor, ko je razred
"je ustvarjena - koda po meri je lahko
"dodana tudi tukaj
Končni pod
Javno pod novo (_
Informacije o ByValu Kot SerializationInfo, _
ByVal kontekst kot StreamingContext)
'inicializirajte svoje spremenljivke programa
„serializirana shramba podatkov
Končni pod
Javni pod GetObjectData (_
Informacije o ByValu Kot SerializationInfo, _
ByVal kontekst kot StreamingContext) _
Izvaja ISerializable. GetObjectData
'posodobite serijsko shranjeno zbirko podatkov
'iz programskih spremenljivk
Končni pod
Končni razred

Ideja je, da zdaj lahko (in v resnici tudi vi) mora) opravite vse posodabljanje in branje podatkov v serializirani shrambi podatkov v Novo in GetObjectData podprogrami. Vključiti morate tudi generično Novo konstruktor (ni seznama parametrov), ker izvajate vmesnik.

Razred ima običajno tudi formalne lastnosti in kodirane metode ...

'Splošna lastnina
Zasebna novaPropertyValue kot niz
Nova lastnost NewProperty () kot niz
Pridite
Vrni novoPropertyValue
Končaj Get
Nastavi (vrednost ByVal kot niz)
newPropertyValue = vrednost
Končni niz
Končna lastnost
„Generična metoda
Javni pod MyMethod ()
'koda metode
Končni pod

Tako dobljeni serijski razred lahko v datoteki ustvari edinstvene vrednosti na podlagi kode, ki jo vnesete. Na primer, razred nepremičnin lahko posodobi vrednost in naslov hiše, vendar bo razred serializiral tudi izračunano tržno klasifikacijo.

The Novo podprogram bo videti nekako takole:

Javno pod novo (_
Informacije o ByValu Kot SerializationInfo, _
ByVal kontekst kot StreamingContext)
'inicializirajte svoje spremenljivke programa
„serializirana shramba podatkov
Parm1Name = informacije. GetString ("a")
Parm1Value = informacije. GetInt32 ("b")
"Nova podstranišče se nadaljuje ...

Kdaj Deserializirati se pokliče na a BinaryFormatter objekta, se ta podstrani izvaja in SerializationInfo predmet se prenese na Novo podprogram. Novo lahko nato s serijskimi vrednostmi podatkov naredi vse, kar je potrebno. Na primer ...

MsgBox ("To je Parm1Value Times Pi:" _
& (Parm1Value * Math) PI) .ToString)

Obratno se zgodi, ko Serizirajte se imenuje, vendar BinaryFormatter objektni klici GetObjectData namesto tega.

Javni pod GetObjectData (_
Informacije o ByValu Kot SerializationInfo, _
ByVal kontekst kot StreamingContext) _
Izvaja ISerializable. GetObjectData
'posodobite serijsko shranjeno zbirko podatkov
'iz programskih spremenljivk
Če je Parm2Name = "Test", potem
info. AddValue ("a", "To je test.")
Ostalo
info. AddValue ("a", "Tokrat ni preizkusa.")
Konec Če
info. AddValue ("b", 2)

Opazite, da so podatki dodani v zaporedno datoteko kot pari imen / vrednosti.

Veliko spletnih strani, ki sem jih našla v pisanju tega članka, se zdi, da nimajo dejanske delovne kode. Človek se sprašuje, ali je avtor dejansko kdaj izvedel kakšno kodo, preden je včasih napisal članek.

instagram story viewer