Compartir a través de


ISerializable Interfaz

Definición

Permite que un objeto controle su propia serialización y deserialización mediante serialización binaria y XML.

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
Derivado
Atributos

Comentarios

Cualquier clase que se pueda serializar mediante serialización binaria o XML debe marcarse con .SerializableAttribute Si una clase necesita controlar su proceso de serialización binaria o XML, puede implementar la ISerializable interfaz . Formatter llama a en GetObjectData tiempo de serialización y rellena el proporcionado SerializationInfo con todos los datos necesarios para representar el objeto . Formatter crea un SerializationInfo objeto con el tipo del objeto en el gráfico. Los objetos que necesitan enviar servidores proxy por sí mismos pueden usar los FullTypeName métodos y AssemblyName en SerializationInfo para cambiar la información transmitida.

En el caso de la herencia de clases, es posible serializar una clase que deriva de una clase base que implementa ISerializable. En este caso, la clase derivada debe llamar a la implementación de clase base de dentro de GetObjectData su implementación de GetObjectData. De lo contrario, los datos de la clase base no se serializarán.

La ISerializable interfaz implica un constructor con la firma constructor (SerializationInfo information, StreamingContext context). En el momento de la deserialización, solo se llama al constructor actual después de que el formateador haya deserializado los datos SerializationInfo de . En general, este constructor debe ser protected si la clase no sealedes .

No se puede garantizar el orden en el que se deserializan los objetos. Por ejemplo, si un tipo hace referencia a un tipo que aún no se ha deserializado, se producirá una excepción. Si va a crear tipos que tienen estas dependencias, puede solucionar el problema implementando la IDeserializationCallback interfaz y el OnDeserialization método .

La arquitectura de serialización controla los tipos de objeto que extienden MarshalByRefObject los mismos que los tipos que extienden Object. Estos tipos se pueden marcar con e SerializableAttribute implementar la ISerializable interfaz como cualquier otro tipo de objeto. Su estado de objeto se capturará y conservará en la secuencia.

Cuando estos tipos se usan a través System.Runtime.Remotingde , la infraestructura de comunicación remota proporciona un suplente que adelanta la serialización típica y, en su lugar, serializa un proxy para .MarshalByRefObject Un suplente es un asistente que sabe cómo serializar y deserializar objetos de un tipo determinado. El proxy, invisible para el usuario en la mayoría de los casos, será de tipo ObjRef.

Como patrón de diseño general, sería inusual que una clase se marque con el atributo serializable y extienda MarshalByRefObject. Los desarrolladores deben pensar detenidamente en los posibles escenarios de serialización y comunicación remota al combinar estas dos características. Un ejemplo en el que esto podría ser aplicable es con .MemoryStream Aunque la clase base de MemoryStream (Stream) se extiende desde MarshalByRefObject, es posible capturar el estado de y MemoryStream restaurarlo a voluntad. Por lo tanto, podría ser significativo serializar el estado de esta secuencia en una base de datos y restaurarlo en algún momento posterior. Sin embargo, cuando se usa a través de la comunicación remota, se proxiaría un objeto de este tipo.

Para obtener más información sobre la serialización de clases que extienden MarshalByRefObject, vea RemotingSurrogateSelector. Para obtener más información sobre cómo implementar ISerializable, vea Serialización personalizada.

Nota

Esta interfaz no se aplica a la serialización JSON mediante System.Text.Json.

Notas a los implementadores

Implemente esta interfaz para permitir que un objeto participe en su propia serialización y deserialización.

Métodos

GetObjectData(SerializationInfo, StreamingContext)
Obsoletos.

Llena SerializationInfo con los datos necesarios para serializar el objeto de destino.

Se aplica a

Consulte también