ISerializable 인터페이스

정의

개체가 이진 및 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
파생
특성

설명

이진 또는 XML serialization을 사용하여 serialize할 수 있는 모든 클래스는 다음으로 SerializableAttribute표시되어야 합니다. 클래스가 이진 또는 XML serialization 프로세스를 제어해야 하는 경우 인터페이스를 구현할 ISerializable 수 있습니다. serialization Formatter 시 호출 GetObjectData 하고 개체를 나타내는 데 필요한 모든 데이터로 제공된 SerializationInfo 데이터를 채웁니다. 그래프 Formatter 에서 SerializationInfo 개체의 형식을 사용하여 만듭니다. 프록시를 직접 보내야 하는 개체는 전송된 정보를 변경하는 데 SerializationInfo 사용할 수 FullTypeName 있습니다AssemblyName.

클래스 상속의 경우 구현하는 기본 클래스에서 파생되는 클래스를 serialize할 수 있습니다 ISerializable. 이 경우 파생 클래스는 구현 GetObjectData내에서 기본 클래스 구현 GetObjectData 을 호출해야 합니다. 그렇지 않으면 기본 클래스의 데이터가 serialize되지 않습니다.

이 인터페이스는 ISerializable 시그니처 constructor (SerializationInfo information, StreamingContext context)가 있는 생성자를 의미합니다. 역직렬화 시 현재 생성자는 포맷터에 SerializationInfo 의해 해당 데이터의 역직렬화된 후에만 호출됩니다. 일반적으로 이 생성자는 클래스가 아닌 sealed경우여야 합니다protected.

개체가 역직렬화되는 순서는 보장할 수 없습니다. 예를 들어 한 형식이 아직 역직렬화되지 않은 형식을 참조하는 경우 예외가 발생합니다. 이러한 종속성이 있는 형식을 만드는 경우 인터페이스 및 OnDeserialization 메서드를 구현하여 IDeserializationCallback 문제를 해결할 수 있습니다.

serialization 아키텍처는 확장하는 Object형식과 동일하게 확장 MarshalByRefObject 되는 개체 형식을 처리합니다. 이러한 형식은 인터페이스를 사용하여 SerializableAttribute 표시하고 다른 개체 형식으로 구현 ISerializable 할 수 있습니다. 해당 개체 상태가 캡처되어 스트림에 유지됩니다.

이러한 형식을 사용하는 System.Runtime.Remoting경우 원격 인프라는 일반적인 serialization을 선점하는 서로게이트를 제공하고 대신 프록시를 MarshalByRefObject직렬화합니다. 서로게이트는 특정 형식의 개체를 직렬화하고 역직렬화하는 방법을 아는 도우미입니다. 대부분의 경우 사용자에게 보이지 않는 프록시는 형식 ObjRef입니다.

일반적인 디자인 패턴으로 클래스가 직렬화 가능한 특성으로 표시되고 확장 MarshalByRefObject되는 것은 드문 일입니다. 개발자는 이러한 두 특성을 결합할 때 가능한 serialization 및 원격 시나리오에 대해 신중하게 고려해야 합니다. 적용할 수 있는 한 가지 예는 다음과 같습니다 MemoryStream. ()의 MemoryStream 기본 클래스는 확장되지만 MarshalByRefObject상태를 MemoryStream 캡처하고 의지에 따라 복원할 수Stream 있습니다. 따라서 이 스트림의 상태를 데이터베이스로 직렬화하고 나중에 복원하는 것이 의미가 있을 수 있습니다. 그러나 원격을 통해 사용하면 이 형식의 개체가 프록시됩니다.

확장 MarshalByRefObject되는 클래스의 serialization에 대한 자세한 내용은 다음을 참조하세요 RemotingSurrogateSelector. 구현에 대한 자세한 내용은 사용자 지정 SerializationISerializable참조하세요.

메모

이 인터페이스는 .를 사용하는 JSON serialization에는 System.Text.Json적용되지 않습니다.

구현자 참고

개체가 자체 직렬화 및 역직렬화에 참여할 수 있도록 이 인터페이스를 구현합니다.

메서드

Name Description
GetObjectData(SerializationInfo, StreamingContext)

대상 개체를 SerializationInfo serialize하는 데 필요한 데이터로 채웁니다.

적용 대상

추가 정보