Sorszámozás (szerializációs) C #
Sorszámozás - a folyamat átalakítására egy tárgy vagy tárgycsoport kapcsolatos byte stream, vagy egy sor XML csomópontok menteni (az adatbázis, fájl, stb), vagy továbbítása (pl hálózaton keresztül). Deserialization - fordított folyamat - a hasznosítást byte stream objektum vagy XML csomópontok. Szerializációs általában átviteléhez használt tárgyak a hálózaton vagy alkalmazás határ, hogy mentse a tárgyakat a fájlt vagy adatbázist, valamint egy mély példányát tárgyakat.
Osztályba tartozó sorozatprogramozásának elrendezve két névtér: System.Runtime.Serialization és System.Xml.Serialization.
sorszámozás mechanizmus
4 mechanizmus, sorozatprogramozásának .NET:
- Adategyezmény Comment
- bináris Comment
- XML-soros (XmlSerializer)
- IXmlSerializable interfész
Az első három készek mechanizmusok szerializálásáról és tegyenek meg mindent a munkát, IXmlSerializable felület magában végrehajtási mechanizmust serialization függetlenül.
Jelenléte három különböző mechanizmus a sorszámozás történelmileg.
Serializer e szerződések a legújabb és sokoldalú. Ezt fel lehet használni a információcsere révén üzenetküldő protokollokat. Azt is előírja, jó elviselhetőség változat, és lehetővé teszi deserialized nyert adatokat egy korábbi vagy későbbi típus, annak a ténynek köszönhető, hogy megszünteti a kapcsolatot az alacsony szintű szerkezetének részleteit a tárgyak és a szerializált adatok. Serializer e szerződések lehet használni a legtöbb feladatok helyett a bináris és az XML-soros.
Binary-soros könnyen kezelhető, és jól automatizálható mindvégig a .NET. Távoli elérés használ bináris sorszámozás infrastruktúra, beleértve a A kölcsönhatás a két alkalmazási területek ugyanabban a folyamatban. Binary Comment gyorsabban dolgozik, mint a adategyezmény Comment, hanem olyan alacsonyabb rendű toleranciát szorosan összekapcsolja a belső-típusú szerkezet a formátum szerializált adatok. Ugyancsak nem lehet generálni XML.
XmlSerializer generálhat csak XML, és a többi szabályozáshoz képest, kevésbé működőképes sorosítás komplex objektumok csoportja. Ugyanakkor együtt XML ez biztosítja a legnagyobb funkcionalitást, valamint egy jól tolerált változatban.
Végrehajtás IXmlSerializable felület vállal operatív felelősséget sorozatprogramozásának a XMLReader és XmlWriter.
Az ilyen szerződések megkötésére Comment és a bináris Comment készült dugóval formázójában. A formázó eredmények képezik a végső prezentáció szerint az adott környezet vagy a kontextus serialization. Két formázójában: XML formázó, és a bináris formázójában. XML jelformáló használt kontekset olvasni / XML rekord, a szöveges fájl és stream SOAP üzenetek. Binary formázójában keretében alkalmazott önkényes byte stream. Binary Output mérete általában kisebb, mint az XML, esetenként jelentősen. Elméletileg serialzitsii mechanizmus nem kapcsolódik a formázó, de a gyakorlatban ezek a szerződések Comment XML formázó, és egy bináris Comment - bináris formázójában.
Adategyezmény Comment
Segítségével Comment ezek a szerződések magában az alábbi három lépést
- válassza ki az osztályt használni: DataContractSerializer vagy NetDataContractSerializer
- add serializable típusú és tagjai az attribútumok [DataContract] és [DataMember] (rendre)
- hozzon létre egy példányt a Comment és hívja a módszerek vagy WriteObject ReadObject
Két adat szerződés Comment:
- DataContractSerializer - egy gyenge kötődést .NET típusok adattípusok szerződések. Generálhat szabványoknak megfelelő XML. Igényel előzetes regisztráció explicit szerializált származtatott típusok, hogy képes az adatok összehasonlítása szerződés nevét a nevét .NET típusok
- NetDataContractSerializer - jellemzi szoros kötődés .NET típusú adatok fajta szerződést nem igényel kifejezett regisztrációs szerializált származtatott fajta, mert függetlenül írja a teljes nevét és típusát szerelvények szerializált típusok
Miután kiválasztotta a Comment is szükséges minden serializable típusú hozzá egy attribútumot [DataContract]. és tagjaikat, hogy tartalmazza a sorszámozás - attribútumok [DataMember]:
sorszámozás horgok
Előtt és után közvetlenül sorszámozás vagy deseralizatsii tud végezni egy speciális módszerrel. Kérdezze ez a módszer segítségével a következő tulajdonságokkal rendelkezik:
- [OnSerializing] - meghatározza a módszert előtt hivatkozhatnak sorossá
- [OnSerialized] - meghatározza a módszert, hogy kezdeményezi, amikor sorossá
- [OnDeserializing] - meghatározza azt a módszert, hogy hívja előtt deserialization
- [OnDeserialized] - meghatározza a meghívott eljárások után deserialization
Egy ilyen eljárás kellene egyetlen típusú paramétert StreamingContext. de csak akkor szükséges konzisztencia bináris serialization mechanizmus nem használják, a párhuzamos-soros adat szerződéseket.
Mivel sorosító nem végez konstruktőrök és inicializáló amikor deserializing, ezeket a módszereket lehet használni, mint a konstruktőrök vagy mező inicializáló során deserialization értékeket rendelni a tagok kizárták a sorszámozás, mert e nélkül kizárták a sorszámozás tagjai kapnak, amikor deserializing az alapértelmezett értékeket a típus, de ez nem vonatkozik értékek, amelyek a rájuk bízott a konstruktőrök és inicializáló.
Módszerek lehet mind állami, mind magán. A származtatott típusok definiálhatók azok a horgok és általuk is okozott budt.
Támogatja a bináris szerializációs mechanizmus
Sorosító ezek a szerződések is szerializálni típusú jelölt [Serializable] attribútum és végrehajtása ISerializable felületet. Ebben az esetben nincs változás a bináris sorszámozás, de sok munka mechanizmusok ka bináris sorszámozás: figyelembe veszi a tulajdonságokat [NonSerialized]. végzett GetObjectData módszerek és konstruktőrök deserialization.
Nem szabad használni mindkét szerződések attribútumok és attribútum bináris szerializációs.
bináris Comment
Tedd típus támogatja a bináris sorszámozás két módja van:
- hozzá az attribútum típusa [Serializable]
- végrehajtja a ISerializable interfész az osztályban
Hozzáadása egy attribútum könnyebb, de a felület végrehajtása több lehetőséget.
Képesség [Serializable]
Tedd típusú serializable lehetséges egyetlen tulajdonság:
Képesség [Serializable] Comment jelzi annak szükségességét, hogy az összes mezőt az ilyen típusú, állami és magán, de nem tartalmazzák a tulajdonságokat.
Minden mezőt kell serializable típusú, azaz type attribútum jelölt [Serializable]. vagy végrehajtja a ISerializable felületen. Primitív típusok és sok más típusú .NET vannak serializable.
Serializable tulajdonság nem öröklődik, így a származtatott osztály nem automatikusan serializable ha konkrétan nem tulajdonítanak Serializable tag.
Típus tulajdonságai nem szerializálódnak, de a sorozatban mögöttes automatikusan generált mezők (sajnos, ezek a mezők is átnevezték újrafordítás).
Művészet bináris sorszámozás
Elvégzésére bináris sorszámozás formázó, akkor létre kell hozni egy objektumot, és hívja a módszer Serialize. Bináris sorszámozás formázójában kétféle:
- BinaryFormatter - hatékonyabb, létrehoz egy kis következtetést rövidebb idő alatt. Meghatározott térben nevek System.Runtime.Serialization.Formatters.Binary
- SoapFormatter - támogatja az alapvető üzenetküldés, kevésbé működőképes, nem támogatja a serialization generikus típusok és a szűrő külső adatokat. Meghatározott térben nevek System.Runtime.Serialization.Formatters.Soap
Mindkettő ugyanazt a jelformáló:
Amikor felüdítő tárgyak deserializer figyelmen kívül hagy minden tervezők.
Serialized adat tartalmaz teljes körű tájékoztatást a típusát és összeszerelés, így ha desereializatsii próbálja vezető típus kompatibilis típusú hiba történik. Deserializer visszaállítja az objektum hivatkozásokat az eredeti állapotukba.
Binary sorosító is támogatott attribútumok [OnSerializing]. [OnSerialized]. [OnDeserializing] és [OnDeserialized]. Használatuk nem különbözik az adatokat sorosító szerződéseket.
Attribútum [NonSerialized]
Ezzel szemben az adatok sorosító szerződéseket, amelyeket meg kell címkézni attribútumok minden serializable területen, egy bináris-soros, amely nem igényel, és alapértelmezés szerint tartalmazza az összes mezőt szerializált objektum. Kizárása egyes területein sorszámozás lehet megjegyezni, hogy az attribútum [NonSerialized]:
Ez azt jelzi, hogy a Comment nem dob kivételt, ha ez nem találkozott a jelölt mezőket az szerializált adatfolyamot, és egyszerűen azt feltételezik, hogy a mező nem szerializált és hagyja üresen (ez lehet majd rendelni az érték módszerével [OnDeserializing]).
VersionAdded érvelés - egy egész szám, növekszik minden alkalommal, amikor egy új típusú, golf. Ez inkább csak tájékoztató jellegűek, és nem érinti a sorszámozás.
Általában annak érdekében, hogy fenntartsák változat tanácsos kerülniük átnevezés, törlés, és a változó típusának területeken.
Amikor BinaryFormatter amikor deserializing érzékeli a szerializált adatfolyam mezője nincs deklarált az osztályban, ő egyszerűen dobja és SoapFormatter sgenenriuet kivétel.
ISerializable interfész
Végrehajtásának ISerializable interfész típus teljes körű ellenőrzése alatt hogyan készül bináris szerializált és deserialized. Az interfész definíció a következő:
A példában SerializationInfo objektum kulcsainak értékei egybeesnek a mezőnevek az osztályban, de ez nem feltétlenül szükséges: megengedett az olyan húr kulcsok, feltéve, hogy a deserialization kivitelező képes lesz átalakítani őket a területen neveket. A tényleges értékek érvényesek bármilyen típusú serializable: rekurzív szerializáció kerül végrehajtásra, ha szükséges. Is megengedett, ha az érték a szótárban null.
Javasoljuk, hogy állapítsa meg a módszer, mint GetObjectData virtuális. úgyhogy a származtatott osztályokban is kiterjeszti a sorszámozás ismét végrehajtása nélkül a ISerializable interfész alapon.
Osztály SerializationInfo is tartalmaz tulajdonságai lehetővé teszik felett a típusát és összeszerelés, amelyben a deserialized példány kell helyezni.
StreamingContext paraméter - ez struktrura a mások által tartalmazó enum érték, amely jelzi, hogy a szerializált példány érkezik.
Amellett, hogy a végrehajtás a ISerializable felület. A típusú menedzser saját serialization deserialization tartalmaznia kell egy kivitelező, hogy úgy két paraméter ugyanaz, mint az eljárás GetObjectData. Meg lehet állapítani, a hozzáférési módosítót.
Számos fajta SerializationInfo osztály speciális módszerek Get *. így például, getString. kényelmesebb előállítására kulcs értékeket. Ha SerializationInfo tárgy nem számít a kért kulcsot, hogy el kell dobni.
XML-soros
A System.Xml.Serialization névtér meghatározott másik Comment - XmlSerializer. Ez lehetővé teszi, sorosításához típusú XML fájlokat. Mint a két megközelítés áll rendelkezésre bináris sorszámozás:
- attribútumokat adhatunk típusú névtér System.Xml.Serialization
- IXmlSerializable végre interfész
A különbség a bináris serialization végrehajtása IXmlSerializable felület kiküszöböli a beépített Comment, így a fejlesztő írásban önálló serialization kódot XMLReader és XmlWriter.