Viss par seriālizēšanu Visual Basic

Serializācija ir objekta pārvēršana lineārā secībā baiti ko sauc par “baitu straumi”. Deserializācija tikai apvērš procesu. Bet kāpēc jūs vēlaties pārveidot objektu baitu straumē?

Galvenais iemesls ir tāds, lai jūs varētu objektu pārvietot. Apsveriet iespējas. Tā kā .NET tīklā "viss ir objekts", jūs varat jebko serializēt un saglabāt failā. Tātad jūs varētu serializēt attēlus, datu failus, pašreizējo programmas moduļa stāvokli (“stāvoklis” ir tāds pats kā programmas momentuzņēmums noteiktā brīdī, lai jūs varētu uz laiku apturēt izpildi un sākt no jauna vēlāk)... visu, kas jums jādara.

Šos objektus varat arī uzglabāt diskā failos, nosūtīt tos tīmeklī, nodot tos citai programmai, saglabāt rezerves kopiju drošībai. Iespējas ir burtiski bezgalīgas.

Tāpēc serializācija ir tik svarīgs process .NET un Visual Basic. Zemāk ir sadaļa par pielāgoto serializāciju, ieviešot ISerializējams saskarne un kodēšana a Jauns un a GetObjectDataapakšprogramma.

Kā pirmo sērijveidošanas piemēru veiksim vienu no vienkāršākajām programmām, taču arī vienu no visnoderīgākajām: seriālizēsim datus un pēc tam vienkāršos klasēs datus varēsim pārveidot failā un no tā. Šajā piemērā dati tiek ne tikai serializēti, bet tiek saglabāta arī datu struktūra. Šeit esošā struktūra ir deklarēta modulī, lai saglabātu lietas... nu... strukturēts.

instagram viewer

Modulis SerializeParms
Sabiedriskās klases ParmExample
Publiskais Parm1Name As String = "Parm1 nosaukums"
Publiskais Parm1Value As Integer = 12345
Publiskais Parm2Name As String
Parm2Value kā decimāldaļa
Beigu klase
Beigu modulis

Pēc tam atsevišķas vērtības var saglabāt failā šādi:

Importa sistēma. Runtime. Serializācija. Formatētāji. Binārs
Importa sistēma. IO
Sabiedriskās klases forma1
Privāts sub mySerialize_Click (_
ByVal sūtītājs kā sistēma. Objekts, _
ByVal e As System. EventArgs) _
Rokturi mySerialize. Klikšķis
Dim ParmData kā jauns ParmExample
ParmData. Parm2Name = "Parm2 nosaukums"
ParmData. Parm2Value = 54321.12345
Dim s as New FileStream ("ParmInfo", FileMode. Izveidot)
Dim f kā jauns BinaryFormatter
f. Serializēt (s, ParmData)
s. Aizvērt ()
Beigas apakš
Beigu klase

Un tās pašas vērtības var iegūt šādi:

Importa sistēma. Runtime. Serializācija. Formatētāji. Binārs
Importa sistēma. IO
Sabiedriskās klases forma1
Privāts sub myDeserialize_Click (_
ByVal sūtītājs kā sistēma. Objekts, _
ByVal e As System. EventArgs) _
Rīki myDeserialize. Klikšķis
Dim s = New FileStream ("ParmInfo", FileMode. Atvērt)
Dim f kā jauns BinaryFormatter
Dim RestoredParms as New ParmExample
RestoredParms = f. Deserialize (s)
s. Aizvērt ()
Konsole. WriteLine (atjaunotāsParms. Parm1Name)
Konsole. WriteLine (atjaunotāsParms. Parm1Value)
Konsole. WriteLine (atjaunotāsParms. Parm2Name)
Konsole. WriteLine (atjaunotāsParms. Parm2Value)
Beigas apakš
Beigu klase

A Uzbūve vai kolekcija (piemēram, ArrayList), nevis a Klase tāpat varētu arī sērijveidot failā.

Tagad, kad esam pārgājuši uz sērijveidošanas pamatprocesu, ļaujim nākamajā lappusē aplūkot specifisko informāciju, kas ir procesa sastāvdaļa.

Viena no pirmajām lietām, kas jums vajadzētu pamanīt šajā piemērā, ir atribūts Klase. Atribūti ir tikai vairāk informācijas, ko varat sniegt VB.NET par objektu, un tie tiek izmantoti daudzām un dažādām lietām. Atribūts šajā kodā liek VB.NET pievienot papildu kodu, lai vēlāk visu šajā klasē varētu seriālizēt.

Ja klasē ir noteiktas preces, kuras jūs nevajag vēlaties sērijveidot, varat izmantot atribūts, lai tos izslēgtu:

Publiskā Parm3Value As String = "Whatever"

Piemērā ievērojiet Serializēt un Deserialize ir metodes BinaryFormatter objekts (f šajā piemērā).

f. Serializēt (s, ParmData)

Šis objekts ņem FileStream objekts un sērijveidāmais objekts kā parametri. Mēs redzēsim, ka VB.NET piedāvā citu objektu, kas ļauj rezultātu izteikt kā XML.

Un pēdējā piezīme: ja tavā objektā ir citi pakārtoti objekti, tie tiks arī serializēti! Bet kopš tā laika visiem objekti, kas ir serializēti obligāti jāmarķē ar atribūts, visi šie bērnu objekti ir jāmarķē arī šādā veidā.

Lai būtu pilnīgi skaidrs par to, kas notiek jūsu programmā, iespējams, vēlēsities parādīt failu ar nosaukumu ParmData Notepad, lai redzētu, kā izskatās serializētie dati. (Ja sekojāt šim kodam, tam vajadzētu būt atkritumu tvertne. Atkļūdošana Tā kā tas ir binārs fails, lielākā daļa satura nav lasāms teksts, taču jums vajadzētu būt iespējai redzēt visas virknes jūsu sērijveida failā. Nākamreiz mēs izveidosim XML versiju, un jūs, iespējams, vēlēsities salīdzināt abas, lai tikai zinātu atšķirības.

Serializēšanai XML binārā faila vietā ir vajadzīgas ļoti maz izmaiņu. XML nav tik ātrs un nevar uztvert informāciju par objektiem, taču tas ir daudz elastīgāks. XML var izmantot gandrīz jebkura cita programmatūras tehnoloģija mūsdienu pasaulē. Ja vēlaties būt pārliecināts, ka failu struktūras "nesaista jūs" ar Microsoft, šī ir laba iespēja izpētīt. Microsoft uzsver "LINQ to XML", lai izveidotu XML datu failus savā jaunākajā tehnoloģijā, taču daudzi cilvēki joprojām dod priekšroku šai metodei.

“X” collā XML apzīmē eXiespējams. Savā XML piemērā mēs izmantosim vienu no šiem XML paplašinājumiem, tehnoloģiju ar nosaukumu SOAP. Tas agrāk nozīmēja "vienkāršu objektu piekļuves protokolu", bet tagad tas ir tikai nosaukums. (SOAP ir tik daudz jaunināts, ka sākotnējais nosaukums vairs tik labi neatbilst.)

Galvenais, kas mums jāmaina mūsu apakšprogrammās, ir sērijveida formatētāja declācija. Tas jāmaina gan apakšprogrammā, kas objektu seriālizē, gan tajā, kas to atkārtoti pelna. Noklusējuma konfigurācijai tas nozīmē trīs izmaiņas jūsu programmā. Pirmkārt, jums jāpievieno atsauce uz projektu. Ar peles labo pogu noklikšķiniet uz projekta un atlasiet Pievienot atsauci .... Pārliecinies ...

Sistēma. Runtime. Serializācija. Formatētāji. Ziepes

... ir pievienots projektam.

Pēc tam mainiet divus paziņojumus programmā, kas uz to atsaucas.

Importa sistēma. Runtime. Serializācija. Formatētāji. Ziepes
Dim f kā jauns SoapFormatter

Šoreiz, ja pārbaudīsit to pašu ParmData failu piezīmjdatorā, jūs redzēsit, ka visa lieta ir lasāmā XML tekstā, piemēram, ...

Parm1 nosaukums
12345
Parm2 nosaukums
54321.12345

Tur ir arī daudz papildu XML, kas ir nepieciešams arī failā esošajam SOAP standartam. Ja vēlaties pārbaudīt, kas atribūts to dara, jūs varat pievienot mainīgo ar šo atribūtu un apskatīt failu, lai pārliecinātos, ka tas nav iekļauts.

Piemērs, kurā mēs tikko kodējām datus, tika serializēts tikai, taču domājams, ka jums ir jākontrolē, kā dati tiek serializēti. VB.NET to arī var izdarīt!

Lai to paveiktu, jums nedaudz jāiedziļinās serializācijas koncepcijā. VB.NET ir jauns objekts, kas šeit palīdzēs: SerializationInfo. Lai gan jums ir iespēja kodēt pielāgoto serializēšanas izturēšanos, tas rada papildu kodēšanas izmaksas.

Pamata papildus kods ir parādīts zemāk. Atcerieties, ka šī klase tiek izmantota kursa vietā ParmExample klase parādīta iepriekšējā piemērā. Šis nav pilnīgs piemērs. Mērķis ir parādīt jauno kodu, kas nepieciešams pielāgotajai serializēšanai.

Importa sistēma. Runtime. Serializācija
_
Sabiedriskās klases pasūtījuma serializācija
Īsteno ISalializējams
'šeit jāmaina dati
“Publicēts sērijveidā, maināms kā tips
Publisks apakšjauns ()
'noklusējuma konstruktors, ja klase
'ir izveidots - pielāgotais kods var būt
'pievienots arī šeit
Beigas apakš
Publisks apakšjauns (_
ByVal informācija kā SerializationInfo, _
ByVal konteksts kā StreamingContext)
inicializējiet programmas mainīgos no
“sērijveida datu krātuve
Beigas apakš
Publiskā apakšsadaļa GetObjectData (_
ByVal informācija kā SerializationInfo, _
ByVal konteksts kā StreamingContext) _
Īsteno ISalializējams. GetObjectData
'atjaunināt serializēto datu krātuvi
'no programmas mainīgajiem
Beigas apakš
Beigu klase

Ideja ir tāda, ka tagad jūs varat (un patiesībā arī jūs obligāti) veic visu datu atjaunināšanu un nolasīšanu serializētajā datu krātuvē Jauns un GetObjectData apakšprogrammas. Jums jāiekļauj arī vispārējs Jauns konstruktors (nav parametru saraksta), jo jūs ieviešat interfeisu.

Klasei parasti būs formālas īpašības un arī kodētas metodes ...

“Vispārīgais īpašums
Privāta newPropertyValue kā virkne
Sabiedriskā īpašuma NewProperty () kā stīga
gūt
Atgriezt newPropertyValue
Beigt saņemt
Iestatīts (ByVal vērtība kā virkne)
newPropertyValue = vērtība
Beigu komplekts
Beigu īpašums
“Ģenēriskā metode
Publiskais apakšmīksts ()
'metodes kods
Beigas apakš

Iegūtā serializētā klase var izveidot unikālas vērtības failā, pamatojoties uz jūsu piegādāto kodu. Piemēram, nekustamā īpašuma klase var atjaunināt mājas vērtību un adresi, bet šī kategorija arī sērijveidos aprēķināto tirgus klasifikāciju.

Jauns apakšprogramma izskatīsies apmēram šādi:

Publisks apakšjauns (_
ByVal informācija kā SerializationInfo, _
ByVal konteksts kā StreamingContext)
inicializējiet programmas mainīgos no
“sērijveida datu krātuve
Parm1Name = informācija. GetString ("a")
Parm1Value = informācija. GetInt32 ("b")
'Jauna apakšdaļa turpinās ...

Kad Deserialize tiek saukts par a BinaryFormatter objekts, šī apakšdaļa tiek izpildīta un a SerializationInfo objekts tiek nodots Jauns apakšprogramma. Jauns var darīt visu, kas nepieciešams, izmantojot serializētās datu vērtības. Piemēram ...

MsgBox ("Tas ir Parm1Value Times Pi:" _
& (Parm1Value * Matemātika. PI) .ToString)

Apgrieztais gadījums notiek, kad Serializēt sauc, bet BinaryFormatter objektu zvani GetObjectData tā vietā.

Publiskā apakšsadaļa GetObjectData (_
ByVal informācija kā SerializationInfo, _
ByVal konteksts kā StreamingContext) _
Īsteno ISalializējams. GetObjectData
'atjaunināt serializēto datu krātuvi
'no programmas mainīgajiem
Ja Parm2Name = "Pārbaude", tad
info. AddValue ("a", "Šis ir tests.")
Citur
info. AddValue ("a", "Šoreiz nav testa")
Beigt ja
info. AddValue ("b", 2)

Ievērojiet, ka dati tiek pievienoti serializētam failam kā vārdu / vērtību pāri.

Šķiet, ka daudzām tīmekļa lapām, kuras esmu atradis, rakstot šo rakstu, nav faktiskā darba koda. Var jautāt, vai autors tiešām ir izpildījis kādu kodu, pirms dažreiz raksta rakstu.

instagram story viewer