Join en-US

Serialización de clases personalizadas

published 8/14/2008 7:49:34 AM by Manuel Fernando

La Serialización es el proceso de almacenar un objeto en un archivo para después recuperarlo, cuando desees recuperar el objeto usas el mecanismo de deserialización para recrear el objeto exactamente como era anteriormente, La Serialización es implementada por el espacio de nombres System.Runtime.Serialization, básicamente si necesaritas almacenar un objeto.


Serialización Binaria

Para realizar la Serialización binaria se usa el método Serialize la clase BinaryFormatter del espacio de nombre Systeme.Runtime.Serialization.Formatters.Binary y cómo vamos almacenar en un archivo debemos usar el espacio de nombres System.IO, el siguiente fragmento de código muestra como se realiza el proceso de Serialización.


Serialización en C#

Serialización en VB

Para deserializar se usa el método Deserialize() de la clase BinaryFormatter como se muestre en el siguiente fragmento de código.


Deserialización en C#

Deserialización en VB

Resultado de la deserialización:

Serializando clases personalizadas

Para poder serializar una clase personalizada, debes agregar el atributo , cuando una clase es serializada el runtime serializa todos los miembros, incluyendo los miembro privados, para proporcionar eficiencia al momento de serializar y reducir el tamaño necesario cuando se escribe el objeto serializado se implementa el atributo a los miembros que no se desean deserializar como miembro privados o miembros calculados.

Los miembros no serializados deben ser inicializados antes que el objeto deserializado sea usado, para permitir que clase automáticamente inicialice los miembro no serializados se le debe implementar a la clase la interface IDeserializationCallBack y usar el método OnDeserialization() de la interfaz para inicializar los miembro no serializados, como se muestre en el siguiente fragmento de código.



Compatibilidad entre versiones

Cuando serializas un objeto y agregas un nuevo miembro a la clase, al momento de realizar el proceso deserialización debido a que el objeto que se encuentra serializado le falta ese miembro por lo cual el runtime lanzara una excepción, para poder deserializar el objeto es necesario proporcionarle a la clase la compatibilidad necesaria con el atributo a los miembro que se han adicionado.

Buenas prácticas para versiones compatibles
  • Nuca elimine un campo de la clase ya serializado.
  • Nunca cambie el nombre o el tipo a campo ya serializado
  • Cuando agregue campo aplíquele el atributo OptionalField
  • Cuando remueva el atributo NonSerializable a un campo aplique el atributo OptionalField

Formatos de Serialización

El .NET Framework incluye dos formatos para Serialización que están implementados por la interfaz IRemotingFormatter del espacio de nombres System.Runtime.Serialization

  • BinaryFormatter: localizada en System.Runtime.SerializationFormatter.Binary, este formato es la mejor forma de serializar objetos que solo se leerán en aplicaciones .NET
  • SoapFormatter: localizada en System.Runtime.SerializationFormatter.Soap, este formato es la mejor forma de serializar objetos que serán trasmitidos a travez de la red o por aplicaciones que no sean .NET

Control de la Serialización SOAP

Cuando serializas con formato Soap puedes tener la necesidad de que el objeto serializado cumpla con requerimientos especificados, tales como los predefinidos por Soap como atributos y nombre de los elementos.

  • SoapAttribute: es aplicado a campos, propiedades públicos, miembros de la clase que se serializaran como un atributo XML.
  • SoapElement: es aplicado a campos, propiedades públicos, miembros de la clase que se serializaran como un elemento XML.
  • SoapEnum: es aplicado a campos públicos que usan identificación con enumeración.
  • SoapIgnore: es usada en campo o propiedades públicas, que deben ser ignoradas en el proceso de Serialización.
  • SoapInclude: Es usada para clases publicas derivadas

Add a comment

Title  

Comments  


Sign in for add you comments


Frameworkla.net compatible con Internet Explorer 8
History Favorites