Serialización (C#)Serialization (C#)

La serialización es el proceso de convertir un objeto en una secuencia de bytes para almacenarlo o transmitirlo a la memoria, a una base de datos o a un archivo.Serialization is the process of converting an object into a stream of bytes to store the object or transmit it to memory, a database, or a file. Su propósito principal es guardar el estado de un objeto para poder volver a crearlo cuando sea necesario.Its main purpose is to save the state of an object in order to be able to recreate it when needed. El proceso inverso se denomina deserialización.The reverse process is called deserialization.

Funcionamiento de la serializaciónHow serialization works

En esta ilustración se muestra el proceso general de la serialización:This illustration shows the overall process of serialization:

Gráfico serialización

El objeto se serializa en una secuencia, que incluye no solo los datos, sino también la información sobre el tipo de objeto, como su versión, referencia cultural y nombre de ensamblado.The object is serialized to a stream, which carries not just the data, but information about the object's type, such as its version, culture, and assembly name. A partir de esa secuencia, el almacenamiento se puede realizar en una base de datos, en un archivo o en la memoria.From that stream, it can be stored in a database, a file, or memory.

Usos de la serializaciónUses for serialization

La serialización permite al desarrollador guardar el estado de un objeto y volver a crearlo según sea necesario, gracias a que proporciona almacenamiento de los objetos e intercambio de datos.Serialization allows the developer to save the state of an object and recreate it as needed, providing storage of objects as well as data exchange. 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.Through serialization, a developer can perform actions like sending the object to a remote application by means of a Web Service, passing an object from one domain to another, passing an object through a firewall as an XML string, or maintaining security or user-specific information across applications.

Conversión de un objeto en serializableMaking an object serializable

Para serializar un objeto, necesita el objeto que se va a serializar, una secuencia que contenga el objeto serializado y un Formatter.To serialize an object, you need the object to be serialized, a stream to contain the serialized object, and a Formatter. System.Runtime.Serialization contiene las clases necesarias para serializar y deserializar objetos.System.Runtime.Serialization contains the classes necessary for serializing and deserializing objects.

Aplique el atributo SerializableAttribute a un tipo para indicar que se pueden serializar instancias de este tipo.Apply the SerializableAttribute attribute to a type to indicate that instances of this type can be serialized. Si se intenta serializar pero el tipo no tiene el atributo SerializableAttribute, se produce una excepción.An exception is thrown if you attempt to serialize but the type doesn't have the SerializableAttribute attribute.

Si no quiere que un campo de la clase sea serializable, aplique el atributo NonSerializedAttribute.If you don't want a field within your class to be serializable, apply the NonSerializedAttribute attribute. Si un campo de un tipo serializable contiene un puntero, un controlador o alguna otra estructura de datos específica para un entorno concreto y el campo no se puede reconstituir correctamente en un entorno diferente, puede convertirlo en no serializable.If a field of a serializable type contains a pointer, a handle, or some other data structure that is specific to a particular environment, and the field cannot be meaningfully reconstituted in a different environment, then you may want to make it nonserializable.

Si una clase serializada contiene referencias a objetos de otras clases marcadas como SerializableAttribute, esos objetos también se serializarán.If a serialized class contains references to objects of other classes that are marked SerializableAttribute, those objects will also be serialized.

Serialización XML y binariaBinary and XML serialization

Puede usar la serialización binaria o XML.You can use binary or XML serialization. En la serialización binaria se serializan todos los miembros, incluso aquellos que son de solo lectura, y mejora el rendimiento.In binary serialization, all members, even members that are read-only, are serialized, and performance is enhanced. La serialización XML proporciona código más legible, así como mayor flexibilidad para compartir objetos y usarlos para fines de interoperabilidad.XML serialization provides more readable code, and greater flexibility of object sharing and usage for interoperability purposes.

Serialización binariaBinary serialization

La serialización binaria utiliza la codificación binaria para generar una serialización compacta para usos como almacenamiento o secuencias de red basadas en socket.Binary serialization uses binary encoding to produce compact serialization for uses such as storage or socket-based network streams.

serialización XMLXML serialization

La serialización XML serializa las propiedades y los 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 esquema XML (XSD).XML serialization serializes the public fields and properties of an object, or the parameters and return values of methods, into an XML stream that conforms to a specific XML Schema definition language (XSD) document. La serialización XML produce clases fuertemente tipadas cuyas propiedades y campos públicos se convierten a XML.XML serialization results in strongly typed classes with public properties and fields that are converted to XML. System.Xml.Serialization contiene las clases necesarias para serializar y deserializar XML.System.Xml.Serialization contains the classes necessary for serializing and deserializing XML.

Se aplican atributos a clases y a miembros de clase para controlar la forma en que XmlSerializer serializa o deserializa una instancia de la clase.You apply attributes to classes and class members to control the way the XmlSerializer serializes or deserializes an instance of the class.

Serialización básica y personalizadaBasic and custom serialization

La serialización puede realizarse de dos formas, es decir, de manera básica y también personalizada.Serialization can be performed in two ways, basic and custom. La serialización básica utiliza .NET Framework para serializar automáticamente el objeto.Basic serialization uses the .NET Framework to automatically serialize the object.

Serialización básicaBasic serialization

El único requisito de la serialización básica es que el objeto tenga aplicado el atributo SerializableAttribute.The only requirement in basic serialization is that the object has the SerializableAttribute attribute applied. NonSerializedAttribute puede usarse para impedir la serialización de campos específicos.The NonSerializedAttribute can be used to keep specific fields from being serialized.

Cuando se usa la serialización básica, el control de versiones de objetos puede causar problemas.When you use basic serialization, the versioning of objects may create problems. Use la serialización personalizada si los problemas de control de versiones son importantes.You would use custom serialization when versioning issues are important. 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.Basic serialization is the easiest way to perform serialization, but it does not provide much control over the process.

Serialización personalizadaCustom serialization

En la serialización personalizada, puede especificar exactamente qué objetos se serializarán y cómo se llevará a cabo la serialización.In custom serialization, you can specify exactly which objects will be serialized and how it will be done. La clase debe marcarse como SerializableAttribute e implementar la interfaz ISerializable.The class must be marked SerializableAttribute and implement the ISerializable interface.

Si desea que el objeto se deserialice también de forma personalizada, debe usar un constructor personalizado.If you want your object to be deserialized in a custom manner as well, you must use a custom constructor.

Serialización de diseñadorDesigner serialization

La serialización de diseñador es una forma especial de serialización que conlleva el tipo de persistencia de objeto asociado a las herramientas de desarrollo.Designer serialization is a special form of serialization that involves the kind of object persistence associated with development tools. La serialización de diseñador es un proceso que consiste en convertir un gráfico de objetos en un archivo de código fuente que puede utilizarse posteriormente para recuperar el gráfico de objetos.Designer serialization is the process of converting an object graph into a source file that can later be used to recover the object graph. Un archivo de código fuente puede contener código, marcado o incluso información de la tabla SQL.A source file can contain code, markup, or even SQL table information.

Temas relacionados y ejemplosRelated Topics and Examples

Tutorial: Conservar un objeto en Visual Studio (C#)Walkthrough: Persisting an Object in Visual Studio (C#)
Se explica cómo se puede usar la serialización para conservar los datos de un objeto entre instancias, lo que le permite almacenar valores y recuperarlos la próxima vez que se cree una instancia del objeto.Demonstrates how serialization can be used to persist an object's data between instances, allowing you to store values and retrieve them the next time the object is instantiated.

Cómo: Leer datos de objetos en un archivo XML (C#)How to: Read Object Data from an XML File (C#)
Se muestra cómo leer los datos de objetos que se han escrito anteriormente en un archivo XML con la clase XmlSerializer.Shows how to read object data that was previously written to an XML file using the XmlSerializer class.

Cómo: Escribir datos de objeto en un archivo XML (C#)How to: Write Object Data to an XML File (C#)
Se muestra cómo escribir el objeto de una clase en un archivo XML con la clase XmlSerializer.Shows how to write the object from a class to an XML file using the XmlSerializer class.