ISerializable Interface

Definitie

Hiermee kan een object zijn eigen serialisatie en deserialisatie beheren via binaire en XML-serialisatie.

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
Afgeleid
Kenmerken

Opmerkingen

Elke klasse die kan worden geserialiseerd met behulp van binaire of XML-serialisatie, moet worden gemarkeerd met de SerializableAttribute. Als een klasse het binaire of XML-serialisatieproces moet beheren, kan de ISerializable interface worden geïmplementeerd. De Formatter aanroept de GetObjectData serialisatietijd en vult de opgegeven SerializationInfo gegevens in die nodig zijn om het object weer te geven. Hiermee Formatter maakt u een SerializationInfo met het type object in de grafiek. Objecten die proxy's voor zichzelf moeten verzenden, kunnen de FullTypeName en AssemblyName methoden SerializationInfo gebruiken om de verzonden informatie te wijzigen.

In het geval van klasseovername is het mogelijk om een klasse te serialiseren die is afgeleid van een basisklasse die wordt geïmplementeerd ISerializable. In dit geval moet de afgeleide klasse de basisklasse-implementatie van binnen de implementatie van GetObjectDataGetObjectData. Anders worden de gegevens uit de basisklasse niet geserialiseerd.

De ISerializable interface impliceert een constructor met de handtekening constructor (SerializationInfo information, StreamingContext context). Bij deserialisatie wordt de huidige constructor alleen aangeroepen nadat de gegevens in de SerializationInfo formatter zijn gedeserialiseerd. Over het algemeen moet deze constructor zijn protected als de klasse niet sealedis.

De volgorde waarin objecten gedeserialiseerd worden, kan niet worden gegarandeerd. Als één type bijvoorbeeld verwijst naar een type dat nog niet is gedeserialiseerd, treedt er een uitzondering op. Als u typen met dergelijke afhankelijkheden maakt, kunt u het probleem omzeilen door de IDeserializationCallback interface en de OnDeserialization methode te implementeren.

De serialisatiearchitectuur verwerkt objecttypen die hetzelfde uitbreiden MarshalByRefObject als typen die uitbreiden Object. Deze typen kunnen worden gemarkeerd met de SerializableAttribute interface en de ISerializable interface implementeren als elk ander objecttype. De objectstatus wordt vastgelegd en opgeslagen in de stream.

Wanneer deze typen worden gebruikt System.Runtime.Remoting, biedt de externe infrastructuur een surrogaat die typische serialisatie voorbereidt en in plaats daarvan een proxy serialiseert naar de MarshalByRefObject. Een surrogaat is een helper die weet hoe objecten van een bepaald type moeten worden geserialiseerd en gedeserialiseerd. De proxy is in de meeste gevallen onzichtbaar voor de gebruiker.ObjRef

Als een algemeen ontwerppatroon zou het ongebruikelijk zijn dat een klasse beide wordt gemarkeerd met het serialiseerbare kenmerk en wordt uitgebreid MarshalByRefObject. Ontwikkelaars moeten zorgvuldig nadenken over de mogelijke serialisatie- en externe scenario's bij het combineren van deze twee kenmerken. Een voorbeeld waarbij dit van toepassing kan zijn, is met een MemoryStream. Hoewel de basisklasse van MemoryStream (Stream) zich uitbreidt MarshalByRefObject, is het mogelijk om de status van een MemoryStream en herstel naar eigen goeddunken vast te leggen. Het kan daarom zinvol zijn om de status van deze stroom te serialiseren in een database en deze op een later tijdstip te herstellen. Wanneer u echter wordt gebruikt via externe communicatie, wordt een object van dit type geproxied.

Zie voor meer informatie over serialisatie van klassen die uitbreidenMarshalByRefObject.RemotingSurrogateSelector Zie Aangepaste serialisatie voor meer informatie over het implementerenISerializable.

Note

Deze interface is niet van toepassing op JSON-serialisatie met behulp van System.Text.Json.

Notities voor uitvoerders

Implementeer deze interface zodat een object kan deelnemen aan een eigen serialisatie en deserialisatie.

Methoden

Name Description
GetObjectData(SerializationInfo, StreamingContext)

Vult een SerializationInfo met de gegevens die nodig zijn om het doelobject te serialiseren.

Van toepassing op

Zie ook