Kaikkea sarjoittamista Visual Basicissä

Sarjallisuus on prosessi, jolla objekti muunnetaan lineaariseksi sekvenssiksi tavua kutsutaan "tavuvirraksi". Deserialisointi vain kääntää prosessin. Mutta miksi haluat muuntaa objektin tavuvirtaksi?

Tärkein syy on, että voit siirtää objektia. Mieti mahdollisuuksia. Koska "kaikki on esine" .NET: ssä, voit sarjastaa kaiken ja tallentaa sen tiedostoon. Joten voit järjestää kuvia, datatiedostoja, ohjelmamoduulin nykyinen tila ('tila' on kuin tilannekuva ohjelmassasi tiettyyn ajankohtaan, jotta voit keskeyttää väliaikaisesti suorituksen ja aloittaa uudelleen myöhemmin)... mitä sinun täytyy tehdä.

Voit myös tallentaa nämä esineet levylle tiedostoina, lähettää ne webin välityksellä, siirtää ne toiselle ohjelmalle, säilyttää varmuuskopion turvallisuuden takaamiseksi. Mahdollisuudet ovat kirjaimellisesti rajattomat.

Siksi sarjanumerointi on niin tärkeä prosessi .NET- ja .NET-sovelluksissa Visual Basic. Alla on osa mukautetusta sarjanumeroinnista toteuttamalla ISerializable käyttöliittymä ja koodaus a Uusi ja a GetObjectDataaliohjelmaan.

instagram viewer

Ensimmäisenä esimerkkinä sarjoittamisesta tehdään yksi helpoimmista, mutta myös hyödyllisimmistä ohjelmista: sarjoitetaan tiedot ja sitten annetaan alustalle yksinkertaisen luokan tiedot tiedostoon ja tiedostoon. Tässä esimerkissä tietoja ei vain sarjata, vaan myös tietojen rakenne tallennetaan. Täällä oleva rakenne on ilmoitettu moduulissa pitämään asiat... hyvin... jäsennelty.

Moduuli SerializeParms
Public Class ParmExample
Julkinen Parm1Name nimellä merkkijono = "Parm1 nimi"
Julkinen Parm1Value Kuten kokonaisluku = 12345
Julkinen Parm2Name kuin merkkijono
Julkinen Parm2Value astetta desimaalina
Loppu luokka
Lopeta moduuli

Sitten yksittäiset arvot voidaan tallentaa tiedostoon seuraavasti:

Tuo järjestelmä. Runtime. Serialization. Muotoilijat. Binääri
Tuo järjestelmä. IO
Julkisen luokan lomake1
Yksityinen osa mySerialize_Click (_
ByVal-lähettäjä järjestelmänä. Kohde, _
ByVal e As -järjestelmä. EventArgs) _
Käsittelee mySerializea. Klikkaus
Dim ParmData uutena ParmExample-mallina
ParmData. Parm2Name = "Parm2 nimi"
ParmData. Parm2Value = 54321.12345
Dim s Uutena tiedostona ("ParmInfo", FileMode. Luoda)
Dim f Uutena binaarimuotoilijana
f. Sarjakuva (t, ParmData)
s. Kiinni()
End Sub
Loppu luokka

Ja samat arvot voidaan hakea näin:

Tuo järjestelmä. Runtime. Serialization. Muotoilijat. Binääri
Tuo järjestelmä. IO
Julkisen luokan lomake1
Yksityinen osa myDeserialize_Click (_
ByVal-lähettäjä järjestelmänä. Kohde, _
ByVal e As -järjestelmä. EventArgs) _
Käsittelee myDeserialize. Klikkaus
Dim s = Uusi FileStream ("ParmInfo", FileMode. Avata)
Dim f Uutena binaarimuotoilijana
Dim RestoredParms kuin uusi ParmExample
RestoredParms = f. Deserialize (t)
s. Kiinni()
Konsoli. WriteLine (Palautetut parit. Parm1Name)
Konsoli. WriteLine (Palautetut parit. Parm1Value)
Konsoli. WriteLine (Palautetut parit. Parm2Name)
Konsoli. WriteLine (Palautetut parit. Parm2Value)
End Sub
Loppu luokka

Rakenne tai kokoelma (kuten ArrayList) eikä a luokka voitaisiin myös sarjoittaa tiedostoksi samalla tavalla.

Nyt kun olemme käyneet läpi sarjoittamisen perusprosessin, annetaan tarkastella seuraavan sivun yksityiskohtia, jotka ovat osa prosessia.

Yksi ensimmäisistä asioista, jotka sinun pitäisi huomata tästä esimerkistä, on attribuutti luokka. määritteet ovat vain lisätietoja, jotka voit antaa VB.NET: lle objektista, ja niitä käytetään moniin erilaisiin asioihin. Tämän koodin määrite käskee VB.NET: n lisäämään ylimääräisen koodin, jotta myöhemmin kaikki tässä luokassa voidaan sarjoittaa.

Jos luokassa on tiettyjä esineitä, jotka sinä älä haluat sarjoittaa, voit käyttää attribuutti niiden poissulkemiseksi:

Julkinen Parm3Value As String = "Mitä tahansa"

Esimerkissä huomautus on se Sarjallistaa ja deserialize ovat menetelmiä BinaryFormatter esine (f tässä esimerkissä).

f. Sarjakuva (t, ParmData)

Tämä esine vie FileStream objekti ja sarjoitettava objekti parametreina. Näemme, että VB.NET tarjoaa toisen objektin, jonka avulla tulos voidaan ilmaista XML-muodossa.

Ja yksi viimeinen huomautus: jos objekti sisältää muita alaisia ​​objekteja, ne myös sarjataan! Mutta siitä lähtien kaikki objektit, jotka sarjataan on pakko merkitä attribuutti, kaikki nämä alaobjektit on merkittävä myös tällä tavalla.

Jotta saatat olla täysin selvää ohjelmassasi tapahtuvasta, saatat haluta näyttää tiedoston nimeltä ParmData Notepadissa nähdäksesi, miltä sarjoitetut tiedot näyttävät. (Jos noudatit tätä koodia, sen pitäisi olla bin. debug -kansio projektissa.) Koska tämä on binaaritiedosto, suurin osa sisällöstä ei ole luettavissa olevaa tekstiä, mutta sinun pitäisi nähdä kaikki sarjoitetun tiedoston merkkijonot. Teemme seuraavaksi XML-version ja haluat ehkä verrata niitä vain tietääksesi eron.

Sarjakuvaus XML-tiedostoon binaaritiedoston sijasta vaatii hyvin vähän muutoksia. XML ei ole yhtä nopea eikä osaa siepata objektitietoja, mutta se on paljon joustavampi. XML: ää voi käyttää melkein mikä tahansa muu ohjelmistotekniikka nykymaailmassa. Jos haluat olla varma, että tiedostorakenteet eivät "sido sinua" Microsoftiin, tämä on hyvä vaihtoehto tutkia. Microsoft korostaa "LINQ to XML" -määritystä luodakseen XML-tiedostot uusimmassa tekniikassaan, mutta monet ihmiset pitävät silti tätä menetelmää.

"X" sisään XML tarkoittaa eXtensible. XML-esimerkissä käytämme yhtä näistä XML-laajennuksista, nimeltään tekniikkaa SAIPPUA. Tämä tarkoitti aiemmin "yksinkertaista objektin käyttöprotokollaa", mutta nyt se on vain nimi. (SOAP on päivitetty niin paljon, että alkuperäinen nimi ei sovi enää niin hyvin.)

Tärkein asia, jota meidän on muutettava aliohjelmissamme, on sarjoitusmuodostimen deslaatio. Tämä on muutettava sekä aliohjelmassa, joka sarjaa objektin, että siinä, joka sen uudelleen ansaitsee. Oletuskokoonpanon yhteydessä tämä tarkoittaa kolmea muutosta ohjelmaan. Ensin sinun on lisättävä viite projektiin. Napsauta projektia hiiren kakkospainikkeella ja valitse Lisää viite .... Varmista ...

Järjestelmä. Runtime. Serialization. Muotoilijat. Saippua

... on lisätty projektiin.

Vaihda sitten kaksi sitä lauseketta ohjelmassa, joka viittaa siihen.

Tuo järjestelmä. Runtime. Serialization. Muotoilijat. Saippua
Dim f Kuten uusi SoapFormatter

Tällä kertaa, jos tarkistat saman ParmData tiedosto Muistiossa, näet, että koko asia on luettavassa XML-tekstissä, kuten ...

Parm1-nimi
12345
Parm2-nimi
54321.12345

Siellä on myös paljon ylimääräistä XML-tiedostoa, mikä on välttämätöntä myös tiedostossa olevalle SOAP-standardille. Jos haluat tarkistaa mitä Attribuutti tekee, voit lisätä muuttujan tällä määritteellä ja katsoa tiedostoa varmistaaksesi, että sitä ei ole mukana.

Esimerkki, jonka me vain koodasimme, vain sarjoitti tiedot, mutta oletetaan, että sinun on valvottava, kuinka tiedot sarjoitetaan. VB.NET voi myös tehdä sen!

Tämän saavuttamiseksi sinun on syytä syventyä sarjoittamisen käsitteeseen. VB.NET: llä on uusi kohde, joka auttaa tässä: SerializationInfo. Vaikka sinulla on kyky koodata mukautettu sarjoittamiskäyttäytyminen, se sisältää ylimääräisen koodauksen kustannukset.

Perus ylimääräinen koodi näkyy alla. Muista, että tätä luokkaa käytetään luokan sijasta ParmExample luokka, joka on esitetty aikaisemmassa esimerkissä. Tämä ei ole täydellinen esimerkki. Tarkoitus on näyttää uusi koodi, jota tarvitaan mukautettuun sarjanumerointiin.

Tuo järjestelmä. Runtime. serialization
_
Public Class CustomSerialization
Toteuttaa ISerialisoitavissa
'Tätä varten sarjoitettavat tiedot
'Public SerializedVariable Type
Julkinen osa Uusi ()
'oletuskonstruktori, kun luokka
'on luotu - mukautettu koodi voi olla
'lisätty myös tähän
End Sub
Julkinen osa Uusi (_
ByVal-tieto nimellä SerializationInfo, _
ByVal-konteksti StreamingContext-muodossa)
'alusta tietokoneesi muuttujat
'sarjoitettu tietovarasto
End Sub
Julkinen aliohjelma GetObjectData (_
ByVal-tieto nimellä SerializationInfo, _
ByVal-konteksti kuin StreamingContext) _
Toteuttaa ISerialisoitavissa. GetObjectData
Päivitä sarjattu tietovarasto
'ohjelman muuttujista
End Sub
Loppu luokka

Ajatuksena on, että nyt voit (ja itse asiassa sinäkin) on pakko) suorittaa kaikki tietojen päivittäminen ja lukeminen sarjoitetussa tietovarastoissa Uusi ja GetObjectData aliohjelmia. Sinun on myös sisällytettävä yleislääke Uusi rakentaja (ei parametriluetteloa), koska olet toteuttamassa käyttöliittymää.

Luokalla on yleensä muodolliset ominaisuudet ja myös koodatut menetelmät ...

'Yleinen omaisuus
Yksityinen newPropertyValue merkkijonona
Julkinen omaisuus NewProperty () merkkijonona
Saada
Palauta newPropertyValue
End Get
Aseta (ByVal-arvo merkkijonona)
newPropertyValue = arvo
End Set
Lopeta omaisuus
'Yleinen menetelmä
Julkinen aliohjelma ()
'menetelmäkoodi
End Sub

Tuloksena saatu sarjaluokka voi luoda tiedostoon ainutlaatuisia arvoja antamasi koodin perusteella. Esimerkiksi kiinteistöluokka saattaa päivittää talon arvon ja osoitteen, mutta luokka järjestäisi myös lasketun markkineluokituksen.

Uusi aliohjelma näyttää tältä:

Julkinen osa Uusi (_
ByVal-tieto nimellä SerializationInfo, _
ByVal-konteksti StreamingContext-muodossa)
'alusta tietokoneesi muuttujat
'sarjoitettu tietovarasto
Parm1Name = tiedot. GetString ( "a")
Parm1Value = tiedot. GetInt32 ( "b")
'Uusi osa jatkuu ...

Kun deserialize kutsutaan a BinaryFormatter objekti, tämä ala suoritetaan ja a SerializationInfo esine siirretään Uusi aliohjelmaan. Uusi voi sitten tehdä kaiken tarvittavan sarjanumeroitujen data-arvojen kanssa. Esimerkiksi ...

MsgBox ("Tämä on Parm1Value Times Pi:" _
& (Parm1Value * Matematiikka. PI) .ToString)

Käänteinen tapahtuu, kun Sarjallistaa kutsutaan, mutta BinaryFormatter kohdepuhelut GetObjectData sen sijaan.

Julkinen aliohjelma GetObjectData (_
ByVal-tieto nimellä SerializationInfo, _
ByVal-konteksti kuin StreamingContext) _
Toteuttaa ISerialisoitavissa. GetObjectData
Päivitä sarjattu tietovarasto
'ohjelman muuttujista
Jos Parm2Name = "Test" Sitten
tiedot. AddValue ("a", "Tämä on testi.")
muu
tiedot. AddValue ("a", "Ei testiä tällä kertaa.")
Loppu Jos
tiedot. AddValue ("b", 2)

Huomaa, että tiedot lisätään sarjoitettuun tiedostoon nimi- / arvopareina.

Monilla tämän artikkelin kirjoittamissa löytämistä verkkosivuilla ei näytä olevan todellista työskentelykoodia. Mietitään, onko kirjoittaja todella suorittanut mitään koodia ennen artikkelin kirjoittamista joskus.