Fundamentos de la serialización de .NET Framework
Actualización: noviembre 2007
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.
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, se necesita que el objeto esté serializado, una secuencia que contenga el objeto serializado y un objeto Formatter. La enumeración 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. No es conveniente pasar los datos a través de un firewall, pero proporciona mejor rendimiento al almacenarlos.
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 con establecimiento inflexible de tipos cuyas propiedades y campos se convierten a XML. La enumeración 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. Para obtener más información, vea Controlar la serialización XML mediante atributos y Atributos que controlan la serialización XML.
En esta tabla se muestran tareas asociadas a la serialización XML:
Para |
Vea |
---|---|
Serializar un objeto |
|
Deserializar un objeto |
|
Generar clases y documentación del esquema XML |
|
Calificar el elemento XML y los nombres del atributo XML |
Cómo: Calificar el elemento XML y los nombres del atributo XML |
Especificar un nombre de elemento alternativo para una secuencia XML |
Cómo: Especificar un nombre de elemento alternativo para una secuencia XML |
Controlar la serialización de clases derivadas |
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. Para obtener más información, vea Serialización XML con servicios web XML y Atributos que controlan la serialización SOAP codificada.
En esta tabla se muestran tareas asociadas a la serialización XML con codificación SOAP:
Para |
Vea |
---|---|
Serializar un objeto como secuencia XML con codificación SOAP |
Cómo: Serializar un objeto como secuencia XML con codificación SOAP |
Reemplazar la serialización XML con codificación SOAP |
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 código fuente puede contener código, formato o, incluso, información de la tabla SQL. Para obtener más información, vea Información general sobre serialización de diseñadores.
Vea también
Tareas
Cómo: Fragmentar datos serializados