Minden, ami a Visual Basic szerializálásáról szól

A sorosítás az az eljárás, amelynek során egy objektumot lineáris szekvenciává alakítanak bájt "bájtos adatfolyamnak" hívják. A deszerializáció csak megfordítja a folyamatot. De miért akarna egy objektumot bájtfolyammá konvertálni?

A fő ok az, hogy az objektumot mozgathatja. Fontolja meg a lehetőségeket. Mivel a .NET-ben "minden egy objektum", bármit sorba rendezhet, és fájlba mentheti. Tehát sorosíthatja a képeket, az adatfájlokat, a programmodul aktuális állapota (az 'állapot' olyan, mint egy pillanatkép a programról egy adott időpontban, így ideiglenesen felfüggesztheti a végrehajtást és újraindíthatja később)... bármit is kell tennie.

Ezeket az objektumokat fájlokon is tárolhatja a fájlokon, elküldheti az interneten, átadhatja egy másik programnak, biztonsági másolatot készíthet biztonsági másolatból. A lehetőségek szó szerint végtelenek.

Ezért a sorosítás olyan kulcsfontosságú folyamat a .NET és a .NET-ben Visual Basic. Az alábbiakban bemutatjuk az egyedi szerializálást a ISerializable interfész és kódolás a Új és a GetObjectDataszubrutint.

instagram viewer

A sorosítás első példájaként végezzük el az egyik legegyszerűbb programot, de az egyik a leghasznosabb programot is: sorosítsuk az adatokat, majd egyszerűen osztályozzuk az adatok fájlokba történő konvertálását. Ebben a példában az adatokat nemcsak sorosítják, hanem az adatok szerkezetét is menti. Az itt felépített struktúrát egy modulban deklarálják, hogy megőrizze a dolgokat... jól... strukturált.

Modul SerializeParms
ParmExample nyilvános osztály
Nyilvános Parm1Name mint karakterlánc = "Parm1 név"
Nyilvános Parm1Value As egész szám = 12345
Nyilvános Parm2Name mint karakterlánc
Nyilvános Parm2Value decimális értékként
Végkategória
Vége a modulnak

Ezután az egyedi értékeket így mentheti egy fájlba:

Import rendszer. Runtime. Sorszámozás. Formázóknál. kétkomponensű
Import rendszer. IO
Nyilvános osztály1
Privát al mySerialize_Click (_
A ByVal feladó mint rendszer. Tárgy, _
ByVal e As rendszer. EventArgs) _
A mySerialize kezelője. kettyenés
Dim ParmData mint új ParmExample
ParmData. Parm2Name = "Parm2 név"
ParmData. Parm2Value = 54321.12345
Dim as New FileStream ("ParmInfo", FileMode. létrehozása)
Dim f as New BinaryFormatter
f. Sorosítás (ok), ParmData
s. Bezárás()
Befejezés Sub
Végkategória

És ugyanazokat az értékeket lehet beolvasni így:

Import rendszer. Runtime. Sorszámozás. Formázóknál. kétkomponensű
Import rendszer. IO
Nyilvános osztály1
Privát al myDeserialize_Click (_
A ByVal feladó mint rendszer. Tárgy, _
ByVal e As rendszer. EventArgs) _
A myDeserialize kezelője. kettyenés
Dim s = Új FileStream ("ParmInfo", FileMode. Nyisd ki)
Dim f as New BinaryFormatter
Dim RestoredParms as New ParmExample
RestoredParms = f. Deszerializálás (ok)
s. Bezárás()
Konzol. WriteLine (RestauráltParms. Parm1Name)
Konzol. WriteLine (RestauráltParms. Parm1Value)
Konzol. WriteLine (RestauráltParms. Parm2Name)
Konzol. WriteLine (RestauráltParms. Parm2Value)
Befejezés Sub
Végkategória

A Szerkezet vagy gyűjtemény (például egy Tömb lista) helyett a Osztály ugyanúgy fájlba sorolható.

Most, hogy túlmentünk az alapvető sorosítási folyamaton, engedjük átnézni a folyamat részleteinek részleteit, a következő oldalon.

Az egyik első dolog, amit észre kell vennie ebben a példában, a attribútum a Osztály. attribútumok csak több információ, amelyet a VB.NET számára nyújthat egy objektumról, és sok különböző dologra használják őket. Ennek a kódnak az attribútuma azt mondja a VB.NET-nek, hogy adjon hozzá kiegészítő kódot, hogy később az osztályban mindent sorba lehessen sorolni.

Ha vannak olyan tételek az osztályban, amelyeket Ön nem Szeretnénk szerializálni, használhatjuk a attribútum kizárni őket:

Nyilvános Parm3Value As String = "Bármi"

A példában ezt észre kell venni serialize és deserialize a BinaryFormatter tárgy (f ebben a példában).

f. Sorosítás (ok), ParmData

Ez az objektum a FileStream objektum és paraméterként sorba rendezendő objektum. Látni fogjuk, hogy a VB.NET egy másik objektumot is kínál, amely lehetővé teszi az eredmény XML-ben kifejezését.

És egy utolsó megjegyzés: ha az objektum más alárendelt objektumokat is tartalmaz, akkor azokat is sorba rendezik! De azóta összes objektumok, amelyek sorosodtak kell meg kell jelölni a attribútum mellett, ezeket a gyermek objektumokat is így kell megjelölni.

Annak érdekében, hogy teljesen tisztában lehessen azzal, hogy mi történik a programban, érdemes megjeleníteni a nevű fájlt ParmData a Jegyzettömbben, hogy megnézze, hogy néznek ki a sorosított adatok. (Ha követte ezt a kódot, akkor a kódban kell lennie kuka. Debug mappát a projektben.) Mivel ez egy bináris fájl, a legtöbb tartalom nem olvasható szöveg, de a sorosított fájl minden karakterláncának látnia kell. Ezután készítünk egy XML-verziót, és érdemes összehasonlítani a kettőt, hogy tisztában legyenek a különbséggel.

A bináris fájl helyett XML-re történő sorosítás nagyon kevés változtatást igényel. Az XML nem olyan gyors és nem képes valamilyen objektuminformációt rögzíteni, de sokkal rugalmasabb. Az XML-t szinte bármilyen más szoftver technológia felhasználhatja a mai világban. Ha biztos akar lenni abban, hogy a fájlszerkezetek nem „kötik meg a Microsoft-ot”, ez egy jó lehetőség, hogy megvizsgáljuk. A Microsoft hangsúlyozza a "LINQ to XML" -t, hogy az XML-adatfájlokat a legújabb technológiájuk szerint hozzák létre, de sokan még mindig ezt a módszert részesítik előnyben.

Az "X" be XML az extensible. XML példánkban az XML egyik kiterjesztését fogjuk használni, az úgynevezett technológiát SZAPPAN. Ez korábban "egyszerű objektum-hozzáférési protokollt" jelentett, de most csak egy név. (A SOAP-ot annyira frissítették, hogy az eredeti név már nem fér el ilyen jól.)

A legfontosabb dolog, amelyet meg kell változtatnunk az alprogramokban, a szérializáló formázó dekódolása. Ezt meg kell változtatni mind a szubrutinban, amely sorba állítja az objektumot, mind az alprogramban, amely újra megérdemli. Az alapértelmezett konfigurációhoz ez három változást jelent a programban. Először hozzá kell adnia egy referenciát a projekthez. Kattintson a jobb gombbal a projektre, és válassza a lehetőséget Referencia hozzáadása .... Győződjön meg róla ...

Rendszer. Runtime. Sorszámozás. Formázóknál. Szappan

... bekerült a projektbe.

Ezután változtassa meg a programban szereplő, két hivatkozást.

Import rendszer. Runtime. Sorszámozás. Formázóknál. Szappan
Dim f as New SoapFormatter

Ezúttal, ha ugyanezt nézi ParmData fájlt a Jegyzettömbben, látni fogja, hogy az egész olvasható XML szövegben van, például ...

Parm1 név
12345
Parm2 név
54321.12345

Van még egy csomó további XML, amelyre szükség van a fájlban a SOAP szabványhoz is. Ha ellenőrizni szeretné, mi a attribútum nem, hozzáadhat egy változót az attribútummal, és megnézheti a fájlt, hogy ellenőrizze, hogy nem szerepel-e benne.

A példa, amelyet csak az adatok sorosítására soroltunk be, de tegyük fel, hogy ellenőriznie kell, hogy az adatok hogyan sorosodnak-e. VB.NET meg tudod csinálni!

Ennek megvalósításához kissé mélyebben kell mélyülnie a szerializáció fogalmába. A VB.NET új objektummal segítséget nyújt itt: SerializationInfo. Bár megvan a lehetősége az egyedi sorosítási magatartás kódolására, az extra kódolás költségeivel jár.

Az alap külön- a kód az alább látható. Ne feledje, hogy ezt az osztályt a ParmExample osztály, amelyet a korábbi példában mutatunk be. Ez nem teljes példa. A cél az új kód bemutatása, amelyre szükség van az egyedi szerializáláshoz.

Import rendszer. Runtime. sorszámozás
_
Nyilvános osztály CustomSerialization
ISerializálható
'az itt sorba rendezendő adatok
„Nyilvános sorozatrólVárható mint típus
Nyilvános rész Új ()
'alapértelmezett kivitelező, amikor az osztály
"létrehozva - az egyedi kód lehet
"is hozzátette
Befejezés Sub
Nyilvános al új (_
ByVal információ, mint SerializationInfo, _
ByVal kontextus mint StreamingContext)
"inicializálja a program változóit a
"sorosított adattár
Befejezés Sub
Nyilvános SubOnObjectData (_
ByVal információ, mint SerializationInfo, _
ByVal kontextus, mint StreamingContext) _
ISerializálható. GetObjectData
frissítse a sorosított adattárat
'programváltozókból
Befejezés Sub
Végkategória

Az ötlet az, hogy most már tudsz (és valójában te is kell) elvégzi az adatok összes frissítését és leolvasását a Új és GetObjectData szubrutinok. Tartalmaznia kell egy általános szót is Új konstruktor (nincs paraméterlista), mert egy felületet valósít meg.

Az osztály általában formális tulajdonságokkal és kódolt módszerekkel is rendelkezik ...

„Általános ingatlan
Privát newPropertyValue mint karakterlánc
Köztulajdonban lévő NewProperty () mint karakterlánc
Kap
Visszaadja az newPropertyValue értéket
End Get
Beállítva (ByVal érték stringként)
newPropertyValue = érték
Vége
Végtulajdon
„Általános módszer
Nyilvános al MyMethod ()
módszer módszer
Befejezés Sub

Az így kapott sorosított osztály egyedi értékeket hozhat létre a fájlban a megadott kód alapján. Például egy ingatlan osztály frissítheti a ház értékét és címét, de az osztály a kiszámított piaci osztályozást is sorba rendezi.

Az Új a szubrutin a következőképpen néz ki:

Nyilvános al új (_
ByVal információ, mint SerializationInfo, _
ByVal kontextus mint StreamingContext)
"inicializálja a program változóit a
"sorosított adattár
Parm1Name = információ. GetString ( "a")
Parm1Value = információ. GetInt32 ( "B")
"Az új rész folytatódik ...

Amikor deserialize hívják a BinaryFormatter objektum, ez az sub végrehajtódik, és a SerializationInfo az objektum átkerül a Új szubrutint. Az new akkor megtehet minden, ami szükséges a sorosított adatértékekkel. Például ...

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

A fordított történik, amikor serialize hívják, de a BinaryFormatter objektumhívások GetObjectData helyette.

Nyilvános SubOnObjectData (_
ByVal információ, mint SerializationInfo, _
ByVal kontextus, mint StreamingContext) _
ISerializálható. GetObjectData
frissítse a sorosított adattárat
'programváltozókból
Ha Parm2Name = "Teszt", akkor
info. AddValue ("a", "Ez egy teszt.")
Más
info. AddValue ("a", "Ezúttal nincs teszt.")
Vége If
info. AddValue ("b", 2)

Vegye figyelembe, hogy az adatokat név / érték párokként adják hozzá a sorosított fájlhoz.

A weboldal nagy részén, amelyet a cikk írása során találtam, nem tűnik tényleges működési kódja. Felmerül a kérdés, vajon a szerző ténylegesen végrehajtott-e valamilyen kódot, mielőtt a cikk elkészült volna.

instagram story viewer