ISerializable Interfész
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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. |