Serializácia je proces prevodu objektu na lineárnu postupnosť bajtov nazýva sa „bajtový tok“. Deserializácia proces len zvráti. Ale prečo by ste chceli previesť objekt na bajtový tok?
Hlavným dôvodom je to, že môžete objekt pohybovať. Zvážte možnosti. Pretože „všetko je objektom“ v .NET, môžete serializovať čokoľvek a uložiť ho do súboru. Takže by ste mohli serializovať obrázky, dátové súbory, súčasný stav programového modulu (stav je ako snímka programu v určitom čase, aby ste mohli dočasne pozastaviť vykonávanie a začať znova neskôr)... všetko, čo musíte urobiť.
Tieto objekty môžete tiež uložiť na disk v súboroch, odoslať ich cez web, odovzdať ich do iného programu, ponechať si záložnú kópiu z dôvodu bezpečnosti alebo zabezpečenia. Možnosti sú doslova nekonečné.
Preto je serializácia v sieťach .NET a Visual Basic. Nižšie je časť o vlastnej serializácii implementáciou systému ISerializable rozhranie a kódovanie a Nový a a GetObjectDatapodprogram.
Ako prvý príklad serializácie urobme jeden z najjednoduchších programov, ale aj jeden z najužitočnejších: serializáciu dát a potom deserializáciu dát v jednoduchej triede do a zo súboru. V tomto príklade nie sú údaje serializované, ale ukladá sa aj štruktúra údajov. Štruktúra je tu deklarovaná v module na uchovávanie vecí... no... štruktúrované.
Modul SerializeParms
Public Parm1Name As String = "Parm1 Name"
Public Parm1Value As Integer = 12345
Public Parm2Name as String
Verejná hodnota Parm2 ako desatinné číslo
Koncová trieda
Koncový modul
Potom je možné jednotlivé hodnoty uložiť do súboru, ako je tento:
Dovozný systém. Beh programu. Serializácie. Formátora. dvojitý
Dovozný systém. IO
Formulár verejnej triedy1
Súkromná sub mySerialize_Click (_
ByVal odosielateľ ako systém. Objekt, _
ByVal e As System. EventArgs) _
Rukoväte mySerialize. cvaknutie
Dim ParmData ako nový príklad Parm
ParmData. Parm2Name = "Parm2 Name"
ParmData. Hodnota Parm2 = 54321,12745
Dim s As New FileStream ("ParmInfo", FileMode. Vytvoriť)
Dim f Ako New BinaryFormatter
f. Serializovať (s, ParmData)
s. Zavrieť()
End Sub
Koncová trieda
Rovnaké hodnoty je možné získať takto:
Dovozný systém. Beh programu. Serializácie. Formátora. dvojitý
Dovozný systém. IO
Formulár verejnej triedy1
Súkromná sub myDeserialize_Click (_
ByVal odosielateľ ako systém. Objekt, _
ByVal e As System. EventArgs) _
Zaobchádza myDeserialize. cvaknutie
Dim s = New FileStream ("ParmInfo", FileMode. Otvorené)
Dim f Ako New BinaryFormatter
Dim RestoredParms As New ParmExample
RestoredParms = f. Deserializovať
s. Zavrieť()
Konzoly. WriteLine (RestoredParms. Parm1Name)
Konzoly. WriteLine (RestoredParms. Parm1Value)
Konzoly. WriteLine (RestoredParms. Parm2Name)
Konzoly. WriteLine (RestoredParms. Parm2Value)
End Sub
Koncová trieda
štruktúra alebo zbierka (napr ArrayList) a nie Trieda mohli byť tiež serializované do súboru rovnakým spôsobom.
Teraz, keď sme prešli základným procesom serializácie, sa na nasledujúcej stránke pozrime na konkrétne podrobnosti, ktoré sú súčasťou procesu.
Jednou z prvých vecí, ktoré by ste si mali v tomto príklade všimnúť, je v atribúte Trieda. atribúty sú len ďalšie informácie, ktoré môžete poskytnúť VB.NET o objekte, a používajú sa na množstvo rôznych vecí. Atribút v tomto kóde hovorí VB.NET, aby pridal ďalší kód, aby sa neskôr mohlo všetko v tejto triede serializovať.
Ak v triede existujú konkrétne položky, ktoré vy nie Ak chcete byť serializovaný, môžete použiť atribút na ich vylúčenie:
V príklade je uvedené, že serialize a rekonštruovať sú metódy BinaryFormatter objekt (F v tomto príklade).
f. Serializovať (s, ParmData)
Tento objekt má FileStream objekt a objekt, ktorý sa má serializovať ako parametre. Uvidíme, že VB.NET ponúka ďalší objekt, ktorý umožňuje vyjadrenie výsledku ako XML.
A posledná poznámka, ak váš objekt obsahuje ďalšie podradené objekty, budú tiež serializované! Ale od tej doby všetko objekty, ktoré sú serializované musieť byť označený atribútom, všetky tieto podradené objekty musia byť tiež označené týmto spôsobom.
Aby ste mali úplne prehľad o tom, čo sa deje vo vašom programe, možno budete chcieť zobraziť názov súboru ParmData v programe Poznámkový blok zobrazíte, ako vyzerajú sériové údaje. (Ak ste postupovali podľa tohto kódu, mal by byť uvedený v bin. ladiť priečinok vo vašom projekte.) Pretože sa jedná o binárny súbor, väčšina obsahu nie je čitateľný text, mali by ste však mať možnosť vidieť akékoľvek reťazce v serializovanom súbore. Ďalej urobíme verziu XML a možno budete chcieť tieto dve porovnať, aby ste si boli vedomí rozdielu.
Serializácia do XML namiesto binárneho súboru vyžaduje veľmi málo zmien. XML nie je tak rýchly a nedokáže zachytiť niektoré informácie o objekte, ale je oveľa flexibilnejší. XML môže dnes používať takmer každá iná softvérová technológia. Ak si chcete byť istí, že vaše štruktúry súborov vás „nezaväzujú“ k spoločnosti Microsoft, je to dobrá voľba na preskúmanie. Spoločnosť Microsoft kladie dôraz na „LINQ to XML“, aby vytvorila dátové súbory XML vo svojej najnovšej technológii, ale mnoho ľudí stále uprednostňuje túto metódu.
"X" v XML znamená eXtensible. V našom príklade XML použijeme jedno z týchto rozšírení XML, tzv. Technológiu SOAP. Toto znamenalo „protokol jednoduchého prístupu k objektom“, ale teraz je to len meno. (SOAP bol aktualizovaný natoľko, že pôvodné meno sa už tak dobre nehodí.)
Hlavná vec, ktorú musíme zmeniť v našich podprogramoch, je declácia formátovacieho modulu serializácie. Toto sa musí zmeniť v podprograme, ktorý serializuje objekt, aj v tom, ktorý ho znova deserializuje. Pre predvolenú konfiguráciu to znamená tri zmeny vo vašom programe. Najprv musíte do projektu pridať odkaz. Pravým tlačidlom myši kliknite na projekt a vyberte možnosť Pridať referenciu .... Uisti sa ...
Systém. Beh programu. Serializácie. Formátora. mydlo
... bol pridaný do projektu.
Potom zmeňte dva výroky v programe, ktorý ich odkazuje.
Dovozný systém. Beh programu. Serializácie. Formátora. mydlo
Dim f ako nový SoapFormatter
Tentoraz, ak sa pozriete na to isté ParmData súbor v programe Poznámkový blok, uvidíte, že celá vec je v čitateľnom texte XML, napríklad ...
V súbore je tiež veľa ďalších XML, ktoré sú potrebné aj pre štandard SOAP. Ak si chcete overiť, čo s atribútom áno, môžete k nemu pridať premennú a pozrieť sa na súbor, aby ste si overili, či nie je zahrnutý.
Príklad, ktorý sme práve kódovali, iba serializoval údaje, ale predpokladajte, že musíte kontrolovať, ako sú údaje serializované. VB.NET môže to tiež urobiť!
Aby ste to dosiahli, musíte sa trochu hlbšie ponoriť do koncepcie serializácie. VB.NET má nový objekt na pomoc tu: SerializationInfo. Aj keď máte možnosť kódovať vlastné sériové správanie, prichádza s nákladmi na ďalšie kódovanie.
Základ extra kód je uvedený nižšie. Pamätajte, že táto trieda sa používa namiesto ParmExample trieda uvedená v predchádzajúcom príklade. Toto nie je úplný príklad. Účelom je ukázať vám nový kód, ktorý je potrebný pre vlastnú serializáciu.
Dovozný systém. Beh programu. serializácie
Prispôsobenie verejnej triedy
Implementácia ISerializable
'údaje, ktoré sa tu majú serializovať
'Public SerializedVariable ako Type
Verejné pod nové ()
'predvolený konštruktor, keď trieda
'je vytvorený - vlastný kód môže byť
'pridané sem
End Sub
Public Sub New (_
ByVal info As SerializationInfo, _
ByVal context As StreamingContext)
'inicializuje vaše premenné programu z
'ukladanie serializovaných údajov
End Sub
Verejné čiastkové getObjectData (_
ByVal info As SerializationInfo, _
ByVal context As StreamingContext) _
Implementácia ISerializable. GetObjectData
'aktualizovať ukladanie serializovaných údajov
'z programových premenných
End Sub
Koncová trieda
Myšlienka je, že teraz môžete (a v skutočnosti aj vy) musieť) vykonať všetky aktualizácie a čítania údajov v serializovanom ukladacom priestore údajov v Nový a GetObjectData podprogramy. Musíte tiež zahrnúť druh Nový konštruktor (bez zoznamu parametrov), pretože implementujete rozhranie.
Trieda bude mať normálne formálne vlastnosti a metódy kódované rovnako ...
„Generické vlastníctvo
Súkromná novinkaPropertyValue As String
Nové vlastníctvo vo verejnom vlastníctve () ako reťazec
dostať
Vrátiť novýVlastnosťVýpočet
End Get
Set (hodnota ByVal ako reťazec)
newPropertyValue = hodnota
End Set
Ukončiť vlastníctvo
„Všeobecná metóda
Verejná čiastková MyMethod ()
'kód metódy
End Sub
Výsledná serializovaná trieda môže vytvoriť jedinečné hodnoty v súbore na základe zadaného kódu. Napríklad trieda nehnuteľností môže aktualizovať hodnotu a adresu domu, ale trieda by tiež serializovala vypočítanú trhovú klasifikáciu.
Nový podprogram bude vyzerať asi takto:
Public Sub New (_
ByVal info As SerializationInfo, _
ByVal context As StreamingContext)
'inicializuje vaše premenné programu z
'ukladanie serializovaných údajov
Parm1Name = info. GetString ( "A")
Parm1Value = info. GetInt32 ( "B")
„Nová sub pokračuje ...
Kedy rekonštruovať sa volá a BinaryFormatter objekt, tento subjekt je vykonaný a SerializationInfo objekt je odovzdaný do Nový podprogram. Nové potom môžu robiť hodnoty potrebné pre sériové hodnoty údajov. Napríklad ...
MsgBox („Toto je Parm1Value Times Pi:“ _
& (Parm1Value * Math. PI) .ToString)
Spiatočka sa stane, keď serialize sa volá, ale BinaryFormatter volania objektov GetObjectData miesto.
Verejné čiastkové getObjectData (_
ByVal info As SerializationInfo, _
ByVal context As StreamingContext) _
Implementácia ISerializable. GetObjectData
'aktualizovať ukladanie serializovaných údajov
'z programových premenných
Ak Parm2Name = "Test" Potom
Info. AddValue („a“, „Toto je test.“)
inak
Info. AddValue („a“, „Tentoraz nie je test.“)
Koniec Ak
Info. AddValue ("b", 2)
Všimnite si, že údaje sa pridajú do serializovaného súboru ako páry názov / hodnota.
Zdá sa, že veľa webových stránok, ktoré som našiel pri písaní tohto článku, nemá skutočný pracovný kód. Človek si kladie otázku, či autor v skutočnosti vykonal nejaký kód skôr, ako napísal článok.