Megosztás:


Migrálás a MessagePackbe (bináris)

MessagePack egy kompakt bináris szerializálási formátum, amely kisebb üzenetméretet eredményez a JSON-hoz és az XML-hez képest. A nyílt forráskód MessagePack for C#-kódtár nagy teljesítményű, és beépített szupergyors LZ4-tömörítést biztosít még kisebb adatmérethez. Ez akkor működik a legjobban, ha az adattípusok vagy a tár saját attribútumaival DataContractSerializer vannak széljegyzetekkel elfűzve. Konfigurálható AOT-környezetek, nem nyilvános típusok és tagok, valamint írásvédett típusok és tagok támogatására.

A C#-hoz készült MessagePack néhány viselkedése és funkciója figyelemre méltó lesz a migrálás BinaryFormattersorán, különösen akkor, ha a szerializált típusok API-jait nem lehet módosítani, vagy minimalizálni kell.

  • Alapértelmezés szerint csak a nyilvános típusok szerializálhatók. A privát és belső szerkezetek és osztályok csak akkor szerializálhatók, ha StandardResolverAllowPrivate.Options argumentumként és MessagePackSerializer.Serialize metódusként szolgálnakMessagePackSerializer.Deserialize.

  • A MessagePack megköveteli, hogy minden szerializálható típushoz hozzá kell fűzni az [MessagePackObject] attribútumot. Ezt elkerülheti a ContractlessStandardResolver használatával, de a jövőben problémákat okozhat a verziószámozással kapcsolatban.

  • Minden szerializálható nem statikus mezőt és tulajdonságot hozzá kell fűzni az [Key] attribútumhoz. Ha az attribútummal jegyzeteli a [MessagePackObject(keyAsPropertyName: true)] típust, a tagok nem igényelnek explicit megjegyzéseket. Ilyen esetben a nyilvános tagok figyelmen kívül hagyásához használja az [IgnoreMember] attribútumot.

  • A privát tagok szerializálásához használja a StandardResolverAllowPrivate parancsot.

  • System.Runtime.SerializationSzéljegyzetek használhatók a MessagePack-széljegyzetek helyett: [DataContract][MessagePackObject][DataMember] helyette [Key]és [IgnoreDataMember] helyett.[IgnoreMember] Ezek a széljegyzetek akkor lehetnek hasznosak, ha el szeretné kerülni a MessagePack-függőséget a szerializálható típusokat definiáló kódtárban.

  • Támogatja az olvasható/nem módosítható típusokat és tagokat. A szerializáló megpróbálja használni a nyilvános konstruktort a legjobban egyeztetett argumentumlistával. A konstruktort attribútum használatával [SerializationConstructor] explicit módon lehet megadni.

  • Serialization tetszőleges típusok használata egyszerű egyéni formázókon keresztül támogatott. Ez eltávolítja az attribútumokra és az adott konstruktor- vagy tagmintákra vonatkozó összes követelményt.

  • A szerializáló támogatja a .NET alaposztálykódtárak által leggyakrabban használt beépített típusokat és gyűjteményeket. A teljes listát a hivatalos dokumentumokban találja. Olyan bővítménypontokkal rendelkezik, amelyek lehetővé teszik a testreszabást.

Figyelmeztetés

A MessagePack API-kkal lehetővé teszi az adatok típuskorlátozások nélküli deszerializálását. A MessagePack biztonsági megjegyzései alapján ezeket az API-kat el kell kerülni.

Figyelmeztetés

Egyes MessagePack API-k viselkedése módosítható statikus statikus elemeken keresztül testreszabható, ami azt jelenti, hogy a kód sikeres vagy sikertelen lehet attól függően, hogy az ugyanabban a folyamatban lévő többi kód, a AssemblyLoadContext vagy az AppDomain mit tehet. A kód rugalmasságát a MessagePackAnalyzer csomagra való hivatkozással és az MsgPack001 és MsgPack002 elemzők engedélyezésével is megőrizheti, amelyek megváltoztatható viselkedéssel hívják fel az API-k bármilyen használatát.