Serialización de clases personalizadas (Parte 2)
La Serialización .NET Framework es muy flexible y se puede controlar el proceso de serialización y deserialización implementando la Interface ISerializable y el atributo Serializable a la clase, la interfaz ISerializable implementa el método GetObjectData() que es usado durante el proceso de Serialización y constructor especial que es usado durante el proceso de deserialización, cuando el runtime llama el método GetObjectData() este proporciona un parámetro SerializableInfo que se encarga de serializar mediante el método SerializableInfo.AddValue() pasando un par nombre-valor.
Implementación en C#
Implementación en VB
Respondiendo a eventos de Serialización.
Cuando usas estos eventos, llaman a métodos en la clase cuando se serializa y deserializa y solo son soportados para la Serialización binaria.
-
Serializing: Este evento es lanzado justo antes de iniciar el proceso de Serialización, se aplica el atributo OnSerializing al método que debe ser ejecutado cuando se lance el evento.
-
Serialized: Este evento es lanzado justo después de llevarse a cabo la Serialización, se aplica el atributo OnSerialized al método que debe ser ejecutado cuando se lance el evento.
-
OnDeserializing: Este evento es lanzado justo antes de iniciar el proceso de deserialización, se aplica el atributo OnDeserializing al método que debe ser ejecutado cuando se lance el evento.
-
Deserialized: Este evento es lanzado justo después de llevarse a cabo el proceso de deserialización, se aplica el atributo OnDeserialized al método que debe ser ejecutado cuando se lance el evento.
Para que un método responda a estos eventos deben cumplir con los siguientes requerimientos.
-
Aceptar un objeto StreamingContext como parámetro.
-
El método no debe retornar valor
-
Debe tener el atributo para capturar el evento.
Como cambiar la Serialización basada en el contexto.La estructura StreamingContext proporciona información acerca del destino del objeto serializado implementado por la interfaz ISerializable que contiene dos propiedades, la propiedad Context es una referencia a un objeto que contiene información del contexto y la propiedad State que establece indicadores de origen y destino para la Serialización y Deserialización que son los siguientes:
-
CrossProcess: El origen y destino es un diferente proceso en la misma máquina.
-
CrossMachine: El origen y destino se realiza en diferente máquina.
-
File: El origen o destino es mediante un archivo.
-
Persistence: El origen o el destino es mediante Base de datos o archivo.
-
Remoting: El origen o el destino es remoto y no se conoce su localización.
-
Other: El origen o destino no es conocido.
-
Close: El grafico de objetos será clonado.
-
CrossAppDomain: El origen o destino es un diferente domino de aplicación.
-
All: El origen o destino puede ser alguno de los anteriores.