Vše o serializaci v jazyce Visual Basic

Serializace je proces převodu objektu na lineární sekvenci bajtů nazývá se "byte stream". Deserializace proces pouze zvrátí. Ale proč byste chtěli převést objekt na byte stream?

Hlavním důvodem je, že můžete objekt pohybovat. Zvažte možnosti. Vzhledem k tomu, že v prostředí .NET je „všechno objektem“, můžete vše serializovat a uložit do souboru. Takže byste mohli serializovat obrázky, datové soubory, aktuální stav programového modulu ('stav' je jako snímek vašeho programu v určitém okamžiku, abyste mohli dočasně pozastavit provádění a začít znovu později)... cokoli musíte udělat.

Tyto objekty můžete také ukládat na disk do souborů, odesílat je přes web, předávat je jinému programu, uchovávat záložní kopii pro zajištění bezpečnosti. Možnosti jsou doslova nekonečné.

Proto je serializace takovým klíčovým procesem v .NET a Visual Basic. Níže je oddíl o vlastní serializaci pomocí implementace ISerializable rozhraní a kódování Nový a GetObjectDatapodprogram.

Jako první příklad serializace udělejme jeden z nejjednodušších programů, ale také jeden z nejužitečnějších: serializace dat a potom deserializace dat v jednoduché třídě do a ze souboru. V tomto příkladu jsou data nejen serializována, ale také je uložena struktura dat. Struktura je zde deklarována v modulu, aby věci udržely... studna... strukturované.

instagram viewer

Modul SerializeParms
Příklad veřejné třídy Parm
Public Parm1Name As String = "Parm1 Name"
Public Parm1Value As Integer = 12345
Public Parm2Name as String
Public Parm2Value As Decimal
Koncová třída
Koncový modul

Poté lze jednotlivé hodnoty uložit do souboru jako je tento:

Dovozní systém. Runtime. Serializace. Formátoři. Binární
Dovozní systém. IO
Formulář veřejné třídy1
Private Sub mySerialize_Click (_
Odesílatel ByVal jako systém. Objekt, _
ByVal e As System. EventArgs) _
Popisuje mySerialize. Klikněte na
Dim ParmData jako nový ParmExample
ParmData. Parm2Name = "Parm2 Name"
ParmData. Parm2Value = 54321,12745
Dim s As New FileStream ("ParmInfo", FileMode. Vytvořit)
Dim f jako nový BinaryFormatter
F. Serializovat (s, ParmData)
s. Zavřít()
End Sub
Koncová třída

A stejné hodnoty lze získat takto:

Dovozní systém. Runtime. Serializace. Formátoři. Binární
Dovozní systém. IO
Formulář veřejné třídy1
Soukromé Sub myDeserialize_Click (_
Odesílatel ByVal jako systém. Objekt, _
ByVal e As System. EventArgs) _
Popisuje myDeserialize. Klikněte na
Dim s = Nový FileStream ("ParmInfo", FileMode. Otevřeno)
Dim f jako nový BinaryFormatter
Dim RestoredParms jako nový ParmExample
RestoredParms = f. Deserializovat
s. Zavřít()
Řídicí panel. WriteLine (RestoredParms. Parm1Name)
Řídicí panel. WriteLine (RestoredParms. Parm1Value)
Řídicí panel. WriteLine (RestoredParms. Parm2Name)
Řídicí panel. WriteLine (RestoredParms. Parm2Value)
End Sub
Koncová třída

A Struktura nebo sbírku (například ArrayList) spíše než a Třída lze také serializovat do souboru stejným způsobem.

Nyní, když jsme prošli základním procesem serializace, pojďme se podívat na konkrétní podrobnosti, které jsou součástí procesu na další stránce.

Jednou z prvních věcí, které byste si měli v tomto příkladu všimnout, je v atributu Třída. Atributy jsou pouze další informace, které můžete poskytnout VB.NET o objektu, a jsou použity pro mnoho různých věcí. Atribut v tomto kódu říká VB.NET, aby přidal další kód, takže později může být vše v této třídě serializováno.

Pokud ve třídě existují určité položky, které vy ne chcete být serializováni, můžete použít atribut k jejich vyloučení:

Public Parm3Value As String = "Whatever"

V příkladu si všimněte, že Serializovat a Deserializovat jsou metody BinaryFormatter objekt (F v tomto příkladu).

F. Serializovat (s, ParmData)

Tento objekt vezme FileStream objekt a objekt, který má být serializován jako parametry. Uvidíme, že VB.NET nabízí další objekt, který umožňuje vyjádření výsledku jako XML.

A poslední poznámka, pokud váš objekt obsahuje další podřízené objekty, budou také serializovány! Ale od Všechno objekty, které jsou serializovány musí být označen atribut, všechny tyto podřízené objekty musí být označeny také.

Chcete-li mít zcela přehled o tom, co se ve vašem programu děje, možná budete chtít zobrazit název souboru ParmData v programu Poznámkový blok zobrazíte, jak vypadá serializovaná data. (Pokud jste postupovali podle tohoto kódu, měl by být v kódu zásobník. Ladit složka ve vašem projektu.) Protože se jedná o binární soubor, většina obsahu není čitelný text, ale měli byste mít možnost vidět v řetězcovém souboru jakékoli řetězce. Uděláme další verzi XML a možná budete chtít porovnat tyto dvě, abyste si byli vědomi rozdílu.

Serializace do XML namísto binárního souboru vyžaduje jen velmi málo změn. XML není tak rychlé a nedokáže zachytit některé informace o objektu, ale je mnohem flexibilnější. XML může být použito téměř jakoukoli jinou softwarovou technologií na světě. Pokud si chcete být jisti, že se vaše souborové struktury „nepřitahují k“ společnosti Microsoft, je to dobrá volba, do které se můžete podívat. Společnost Microsoft klade důraz na „LINQ to XML“, aby vytvořila datové soubory XML ve své nejnovější technologii, ale mnoho lidí tuto metodu stále dává přednost.

'X' v XML znamená eXnapjatý. V našem příkladu XML použijeme jedno z těchto rozšíření XML, tzv. Technologii MÝDLO. To znamenalo „Simple Object Access Protocol“, ale nyní je to jen jméno. (SOAP byl aktualizován natolik, že se původní název tak dobře nehodí.)

Hlavní věcí, kterou musíme v našich podprogramech změnit, je declace formátovacího modulu serializace. To musí být změněno v podprogramu, který serializuje objekt, a v tom, který jej znovu deserializuje. Pro výchozí konfiguraci to zahrnuje tři změny vašeho programu. Nejprve musíte do projektu přidat odkaz. Klepněte pravým tlačítkem myši na projekt a vyberte možnost Přidat odkaz .... Ujisti se ...

Systém. Runtime. Serializace. Formátoři. Mýdlo

... byl přidán do projektu.

Poté změňte dva příkazy v programu, který je odkazuje.

Dovozní systém. Runtime. Serializace. Formátoři. Mýdlo
Dim f jako nový SoapFormatter

Tentokrát, pokud se podíváte na to samé ParmData soubor v programu Poznámkový blok, uvidíte, že celá věc je v čitelném textu XML, například ...

Název Parm1
12345
Název Parm2
54321.12345

V souboru je také spousta dalších XML, která jsou nezbytná pro standard SOAP. Pokud chcete ověřit, co s atributem můžete přidat proměnnou s tímto atributem a podívat se na soubor a ověřit, že není zahrnut.

Příklad, který jsme právě kódovali, pouze serializoval data, ale předpokládejme, že musíte kontrolovat, jak jsou data serializována. VB.NET to také dokáže!

Abyste toho dosáhli, musíte se trochu ponořit do pojmu serializace. VB.NET má nový objekt, který vám pomůže zde: SerializaceInfo. Ačkoli máte možnost kódovat vlastní serializační chování, přichází s náklady na další kódování.

Základní další kód je uveden níže. Pamatujte, že tato třída se používá místo ParmExample třída ukázaná v předchozím příkladu. Toto není úplný příklad. Účelem je ukázat vám nový kód, který je potřebný pro vlastní serializaci.

Dovozní systém. Runtime. Serializace
_
Veřejná třída CustomSerialization
Implementuje ISerializable
'data, která se zde mají serializovat
'Public SerializedVariable jako Type
Public Sub New ()
'výchozí konstruktor, když třída
'je vytvořen - vlastní kód může být
'přidal sem také
End Sub
Public Sub New (_
ByVal info As SerializationInfo, _
ByVal kontext jako StreamingContext)
'inicializuje programové proměnné z
'serializovaný datový sklad
End Sub
Public Sub GetObjectData (_
ByVal info As SerializationInfo, _
ByVal context As StreamingContext) _
Implementuje ISerializable. GetObjectData
'aktualizovat úložiště serializovaných dat
'z programových proměnných
End Sub
Koncová třída

Myšlenka je, že nyní můžete (a ve skutečnosti vy musí) provádět veškerou aktualizaci a čtení dat v serializovaném datovém úložišti v Nový a GetObjectData podprogramy. Musíte také zahrnout druh Nový konstruktor (bez seznamu parametrů), protože implementujete rozhraní.

Třída bude normálně mít také formální vlastnosti a metody kódované také ...

„Obecná vlastnost
Soukromý newPropertyValue As String
NewProperty ve veřejném vlastnictví () jako řetězec
Dostat
Návrat newPropertyValue
End Get
Nastavit (hodnota ByVal jako řetězec)
newPropertyValue = hodnota
End Set
Ukončit vlastnost
„Obecná metoda
Public Sub MyMethod ()
'kód metody
End Sub

Výsledná serializovaná třída může vytvořit jedinečné hodnoty v souboru na základě zadaného kódu. Například třída nemovitostí může aktualizovat hodnotu a adresu domu, ale třída by také serializovala vypočítanou tržní klasifikaci.

Nový podprogram bude vypadat asi takto:

Public Sub New (_
ByVal info As SerializationInfo, _
ByVal kontext jako StreamingContext)
'inicializuje programové proměnné z
'serializovaný datový sklad
Parm1Name = info. GetString („a“)
Parm1Value = info. GetInt32 ("b")
"Nová sub pokračuje ...

Když Deserializovat se nazývá a BinaryFormatter objekt, je tento díl proveden a SerializaceInfo objekt je předán do Nový podprogram. Nový pak může udělat se všemi potřebnými hodnotami serializovaných dat. Například ...

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

Zpět se stane, když Serializovat se nazývá, ale BinaryFormatter volání objektu GetObjectData namísto.

Public Sub GetObjectData (_
ByVal info As SerializationInfo, _
ByVal context As StreamingContext) _
Implementuje ISerializable. GetObjectData
'aktualizovat úložiště serializovaných dat
'z programových proměnných
Pokud Parm2Name = "Test" Then
informace. AddValue ("a", "Toto je test.")
Jiný
informace. AddValue ("a", "Tentokrát žádný test.")
Konec If
informace. AddValue ("b", 2)

Všimněte si, že data jsou přidána do serializovaného souboru jako páry název / hodnota.

Zdá se, že mnoho webových stránek, které jsem našel při psaní tohoto článku, nemá skutečný pracovní kód. Člověk si klade otázku, zda autor skutečně provedl nějaký kód před tím, než napsal článek někdy.