ISerializable Interfész

Definíció

Lehetővé teszi, hogy egy objektum bináris és XML-szerializálással vezérelje saját szerializálását és deszerializálását.

public interface class ISerializable
public interface ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
public interface ISerializable
type ISerializable = interface
[<System.Runtime.InteropServices.ComVisible(true)>]
type ISerializable = interface
Public Interface ISerializable
Származtatott
Attribútumok

Megjegyzések

Minden olyan osztályt, amely bináris vagy XML szerializálással szerializálható, meg kell jelölni a SerializableAttribute. Ha egy osztálynak szabályoznia kell a bináris vagy XML szerializálási folyamatát, megvalósíthatja az interfészt ISerializable . A Formatter rendszer meghívja a GetObjectData szerializálási időpontot, és feltölti a megadott SerializationInfo adatokat az objektum megjelenítéséhez szükséges összes adattal. Az Formatter objektum a gráfban lévő objektum típusával jön létre SerializationInfo . Azoknak az objektumoknak, amelyeknek proxykat kell küldeniük maguknak, használhatják a FullTypeName továbbított információk módosítására szolgáló módszereket és AssemblyName módszereket SerializationInfo .

Osztályöröklés esetén lehetőség van olyan osztály szerializálására, amely egy implementálandó alaposztályból származik ISerializable. Ebben az esetben a származtatott osztálynak az alaposztály implementálását GetObjectData kell meghívnia annak megvalósításán GetObjectDatabelül. Ellenkező esetben az alaposztály adatai nem lesznek szerializálva.

Az ISerializable interfész egy konstruktort feltételez az aláírással constructor (SerializationInfo information, StreamingContext context). Deszerializáláskor a rendszer csak akkor hívja meg az aktuális konstruktort, ha a formázó deszerializálta a benne lévő SerializationInfo adatokat. Ennek a konstruktornak általában akkor kell lennie protected , ha az osztály nem sealed.

Az objektumok deszerializálásának sorrendje nem garantálható. Ha például egy típus egy még nem deszerializált típusra hivatkozik, kivétel történik. Ha ilyen függőségekkel rendelkező típusokat hoz létre, az interfész és a metódus implementálásával megkerülheti a IDeserializationCallbackOnDeserialization problémát.

A szerializálási architektúra azokat az objektumtípusokat kezeli, amelyek ugyanúgy terjednek ki MarshalByRefObject , mint a kiterjesztő Objecttípusok. Ezek a típusok megjelölhetők az SerializableAttribute illesztővel, és bármilyen más objektumtípusként implementálhatók ISerializable . A rendszer rögzíti és megőrzi az objektum állapotát a streamben.

Ha ezeket a típusokat használja System.Runtime.Remoting, az újraírási infrastruktúra egy helyettesítő szolgáltatást biztosít, amely a tipikus szerializálást előz meg, és ehelyett szerializálja a proxyt a MarshalByRefObject. A helyettes egy segítő, aki tudja, hogyan szerializálhatja és deszerializálhatja az adott típusú objektumokat. A proxy, amely a legtöbb esetben nem látható a felhasználó számára, típusának ObjRefkell lennie.

Általános tervezési mintaként szokatlan lenne, ha egy osztályt szerializálható attribútummal jelölnének meg, és kiterjesztenének MarshalByRefObject. A fejlesztőknek alaposan át kell gondolniuk a lehetséges szerializálási és újraegyesítési forgatókönyveket a két jellemző kombinálásakor. Az egyik példa, ahol ez alkalmazható lehet, MemoryStreamegy . Bár a () alaposztálya MemoryStream kiterjeszthetőStream, lehetőség van az állapot MarshalByRefObject rögzítésére és a visszaállításra.MemoryStream Ezért érdemes lehet a stream állapotát egy adatbázisba szerializálni, és egy későbbi időpontban visszaállítani. Ha azonban újraírással használják, az ilyen típusú objektumok ki vannak próbálva.

További információ a kiterjesztett MarshalByRefObjectosztályok szerializálásáról: RemotingSurrogateSelector. A megvalósításról ISerializabletovábbi információt az Egyéni szerializálás című témakörben talál.

Note

Ez a felület nem vonatkozik a JSON-szerializálásra a következő használatával System.Text.Json: .

Megjegyzések az implementálókhoz

Implementálja ezt az interfészt, hogy lehetővé tegye egy objektum számára, hogy részt vegyen saját szerializálásában és deszerializálásában.

Metódusok

Name Description
GetObjectData(SerializationInfo, StreamingContext)
Elavult.

Feltölti a SerializationInfo célobjektum szerializálásához szükséges adatokat.

A következőre érvényes:

Lásd még