Compartir a través de


Serialización (C# y Visual Basic)

La serialización es el proceso de convertir un objeto en una secuencia de bytes para conservarlo en memoria, una base de datos o un archivo. Su propósito principal es guardar el estado de un objeto para poder crearlo de nuevo cuando se necesita. El proceso inverso se denomina deserialización.

Cómo funciona la serialización

Este ejemplo muestra el proceso total de serialización.

Gráfico Serialización

El objeto se serializa en una secuencia que, además de los datos, contiene información sobre el tipo de objeto, como la versión, referencia cultural y nombre de ensamblado. Esa secuencia se puede almacenar en una base de datos, un archivo o en memoria.

Usos de la serialización

La serialización permite al desarrollador guardar el estado de un objeto y volver a crearlo cuando es necesario, y proporcionar almacenamiento de objetos e intercambio de datos. A través de la serialización, un desarrollador puede realizar acciones como enviar un objeto a una aplicación remota por medio de un servicio Web, pasar un objeto de un dominio a otro, pasar un objeto a través de un firewall como una cadena XML o mantener la seguridad o información específica del usuario entre aplicaciones.

Crear un objeto serializable

Para serializar un objeto, necesita el objeto que se va a serializar, la secuencia que va a contener el objeto serializado y un objeto Formatter. System.Runtime.Serialization contiene las clases necesarias para serializar y deserializar objetos.

Aplique el atributo SerializableAttribute a un tipo para indicar que se pueden serializar las instancias de ese tipo. Se produce una excepción SerializationException si se intenta serializar pero el tipo no tiene el atributo SerializableAttribute.

Si no desea que un campo de su clase se pueda serializar, aplique el atributo NonSerializedAttribute. Si un campo de un tipo serializable contiene un puntero, controlador u otra estructura de datos específica de un entorno determinado, y el significado del campo no se puede reconstruir en un entorno diferente, es conveniente que no sea serializable.

Si una clase serializada contiene referencias a objetos de otras clases marcadas con el atributo SerializableAttribute, esos objetos también se serializarán.

Serialización binaria y XML

Se puede utilizar serialización binaria o XML. En la serialización binaria, se serializan todos los miembros, incluso aquellos que son de sólo lectura, y se mejora el rendimiento. La serialización XML proporciona código más legible, así como mayor flexibilidad para compartir objetos y utilizarlos para fines de interoperabilidad.

Serialización binaria

La serialización binaria utiliza la codificación binaria a fin de generar una serialización compacta para usos como almacenamiento o secuencias de red basadas en sockets.

Serialización XML

La serialización XML serializa las propiedades y campos públicos de un objeto o los parámetros y valores devueltos de los métodos en una secuencia XML que se ajusta a un documento específico del lenguaje de definición de esquemas XML (XSD). La serialización XML produce clases fuertemente tipadas con propiedades y campos que se convierten en XML. System.Xml.Serialization contiene las clases necesarias para serializar y deserializar XML.

Se pueden aplicar atributos a clases y miembros de clase para controlar la manera en que XmlSerializer serializa o deserializa una instancia de la clase.

Serialización SOAP

La serialización XML también se puede usar para serializar objetos en secuencias XML que se ajustan a la especificación SOAP. SOAP es un protocolo basado en XML, diseñado específicamente para transportar llamadas a procedimiento utilizando XML. Al igual que la serialización XML normal, estos atributos también pueden utilizarse para controlar los mensajes SOAP de estilo literal que genera un servicio Web XML.

Serialización básica y personalizada

La serialización se puede realizar de dos maneras: básica y personalizada. La serialización básica utiliza .NET Framework para serializar automáticamente el objeto.

Serialización básica

El único requisito de la serialización básica es que se haya aplicado el atributo SerializableAttribute al objeto. NonSerializedAttribute se puede utilizar para evitar que se serialicen campos concretos.

Cuando se utiliza la serialización básica, la versión de objetos puede crear problemas, en cuyo caso la serialización personalizada puede ser preferible. La serialización básica es la manera más fácil de realizar la serialización, pero no proporciona mucho control sobre el proceso.

Serialización personalizada

En serialización personalizada, se puede especificar exactamente qué objetos se serializarán y cómo se hará. La clase se debe marcar con el atributo SerializableAttribute y se debe implementar la interfaz ISerializable.

Si desea deserializar el objeto también de una manera personalizada, debe utilizar un constructor personalizado.

Serialización de diseñador

La serialización de diseñador es una forma especial de serialización en la que interviene el tipo de persistencia de objeto normalmente asociado a las herramientas de desarrollo. La serialización de diseñador es el proceso de convertir un gráfico de objetos en un archivo de código fuente que se puede utilizar después para recuperar el gráfico de objetos. Un archivo de origen puede contener código, marcado o incluso información de tablas SQL. Para obtener más información, vea Información general sobre serialización de diseñadores.

Temas relacionados