Movatterモバイル変換


[0]ホーム

URL:


Skip to main contentSkip to in-page navigation

This browser is no longer supported.

Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.

Download Microsoft EdgeMore info about Internet Explorer and Microsoft Edge
Table of contentsExit editor mode

ISerializable Interface

Definition

Namespace:
System.Runtime.Serialization
Assemblies:
netstandard.dll, System.Runtime.dll
Assembly:
System.Runtime.Serialization.Formatters.dll
Assembly:
System.Runtime.dll
Assembly:
mscorlib.dll
Assembly:
netstandard.dll
Source:
ISerializable.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Allows an object to control its own serialization and deserialization through binary and XML serialization.

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
Derived
Attributes

Remarks

Any class that might be serialized using binary or XML serialization must be marked with theSerializableAttribute. If a class needs to control its binary or XML serialization process, it can implement theISerializable interface. TheFormatter calls theGetObjectData at serialization time and populates the suppliedSerializationInfo with all the data required to represent the object. TheFormatter creates aSerializationInfo with the type of the object in the graph. Objects that need to send proxies for themselves can use theFullTypeName andAssemblyName methods onSerializationInfo to change the transmitted information.

In the case of class inheritance, it is possible to serialize a class that derives from a base class that implementsISerializable. In this case, the derived class should call the base class implementation ofGetObjectData inside its implementation ofGetObjectData. Otherwise, the data from the base class will not be serialized.

TheISerializable interface implies a constructor with the signatureconstructor (SerializationInfo information, StreamingContext context). At deserialization time, the current constructor is called only after the data in theSerializationInfo has been deserialized by the formatter. In general, this constructor should beprotected if the class is notsealed.

The order in which objects are deserialized cannot be guaranteed. For example, if one type references a type that has not been deserialized yet, an exception will occur. If you are creating types that have such dependencies, you can work around the problem by implementing theIDeserializationCallback interface and theOnDeserialization method.

The serialization architecture handles object types that extendMarshalByRefObject the same as types that extendObject. These types can be marked with theSerializableAttribute and implement theISerializable interface as any other object type. Their object state will be captured and persisted onto the stream.

When these types are being used throughSystem.Runtime.Remoting, the remoting infrastructure provides a surrogate that preempts typical serialization and instead serializes a proxy to theMarshalByRefObject. A surrogate is a helper that knows how to serialize and deserialize objects of a particular type. The proxy, invisible to the user in most cases, will be of typeObjRef.

As a general design pattern, it would be unusual for a class to be both marked with the serializable attribute and extendMarshalByRefObject. Developers should think carefully about the possible serialization and remoting scenarios when combining these two characteristics. One example where this might be applicable is with aMemoryStream. While the base class ofMemoryStream (Stream) extends fromMarshalByRefObject, it is possible to capture the state of aMemoryStream and restore it at will. It might, therefore, be meaningful to serialize the state of this stream into a database and restore it at some later point in time. However, when used through remoting, an object of this type would be proxied.

For more information about serialization of classes that extendMarshalByRefObject, seeRemotingSurrogateSelector. For more information about implementingISerializable, seeCustom Serialization.

Note

This interface does not apply to JSON serialization usingSystem.Text.Json.

Notes to Implementers

Implement this interface to allow an object to take part in its own serialization and deserialization.

Methods

GetObjectData(SerializationInfo, StreamingContext)
Obsolete.

Populates aSerializationInfo with the data needed to serialize the target object.

Applies to

See also

Collaborate with us on GitHub
The source for this content can be found on GitHub, where you can also create and review issues and pull requests. For more information, seeour contributor guide.

Feedback

Was this page helpful?

YesNoNo

Need help with this topic?

Want to try using Ask Learn to clarify or guide you through this topic?

Suggest a fix?

In this article

Was this page helpful?

YesNo
No

Need help with this topic?

Want to try using Ask Learn to clarify or guide you through this topic?

Suggest a fix?