¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. C# 10
  3. Serialización
Extrait - C# 10 Desarrolle aplicaciones Windows con Visual Studio 2022
Extractos del libro
C# 10 Desarrolle aplicaciones Windows con Visual Studio 2022
4 opiniones
Volver a la página de compra del libro

Serialización

Introducción

La serialización es el nombre del proceso que permite convertir un objeto en una secuencia. Una vez realizada la conversión, es posible guardar el resultado en un archivo o enviarlo a otra aplicación. La recuperación de esta secuencia y su transformación en el objeto original se llama deserialización.

El Framework .NET ofrece dos técnicas:

  • La serialización binaria permite crear una copia exacta del objeto serializado. Todas las propiedades públicas, privadas, su clase e incluso su ensamblado se transforman en un flujo de datos.

  • La serialización XML crea una representación únicamente de las propiedades y de los campos públicos. La ventaja es que permite establecer una comunicación más sencilla entre aplicaciones heterogéneas. La serialización SOAP, que es una variante, se utiliza mucho en los servicios web.

La serialización binaria

La razón más importante para utilizar la serialización binaria es poder persistir el estado de un objeto, para poder volver a crearlo de manera idéntica más adelante. Este objeto se puede almacenar en un archivo o enviar como una secuencia a través de la red. Otra ventaja es que la serialización binaria conserva el estado de los miembros públicos y privados del objeto.

Por el contrario, no es fácil utilizar secuencias generadas en o desde una aplicación de terceros.

1. Conceptos básicos

El requisito previo para poder serializar una clase es marcarla con el atributo Serializable. Si intenta serializar un objeto que no se ha marcado con este atributo se producirá una excepción de tipo SerializationException:

[Serializable]  
public class ReplacedField  
{  
    public string Pattern;  
    public string Field;  
    public bool HasChanged;  
} 

El siguiente ejemplo de código muestra el método que permite a un objeto de esta clase serializarse en un archivo:

// Instanciación e inicialización del objeto  
ReplacedField O = new ReplacedField();  
O.Field = "myField";  
O.Pattern = "myPattern";  
O.HasChanged = true;  
  
// Creación del constructor binario  
IFormatter formatter = new BinaryFormatter();  
  
// Creación de la secuencia 
Stream stream = new FileStream(@"C:\ReplacedField.bin",   
FileMode.Create);  
  
// Serialización del objeto en la secuencia  
formatter.Serialize(stream, O);  
stream.Close();  
stream.Dispose(); 

La serialización utiliza un constructor binario de tipo BinaryFormatter del espacio de nombres System.Runtime.Serialization.Formatters.Binary.

Para realizar la transformación, basta con llamar al método Serialize de este objeto pasando como argumentos la secuencia en la que escribir los datos y el objeto a serializar.

La deserialización sigue el mismo esquema y utiliza también un constructor binario para el que hay que llamar al método Deserialize pasando como argumento la secuencia que contiene el objeto. Devuelve un objeto que habrá...

La serialización XML

El proceso de serialización XML solo se ocupa de los campos públicos, sin información sobre los tipos, los campos privados o las propiedades en modo de solo lectura. La ventaja principal de la serialización XML es su flexibilidad a nivel de la secuencia que se crea. Permite transportar con facilidad los datos de una aplicación a otra.

1. Los conceptos básicos

Los procesos de serialización y deserialización XML siguen los mismos principios que la serialización binaria, excepto que la clase no se tiene que marcar con el atributo Serializable:

public class ReplacedField  
{  
    public string Pattern;  
    public string Field;  
    public bool HasChanged;  
} 

La clase XmlSerializer del espacio de nombres System.Xml.Serialization se usa para hacer transformaciones:

// Instanciación e inicialización del objeto  
ReplacedField O = new ReplacedField();  
O.Field = "myField";  
O.Pattern = "myPattern";  
O.HasChanged = true;  
  
// Creación del serializador XML  
XmlSerializer serializer = new   
XmlSerializer(tipoof(ReplacedField));  
  
// Creación de la secuencia 
Stream stream = new FileStream(@"C:\ReplacedField.xml",   
FileMode.Create);  
  
// Serialización del objeto en la secuencia 
serializer.Serialize(stream, O);  
stream.Close(); 

El objeto XmlSerializer recibe como argumento el tipo del objeto a serializar. La llamada al método Serialize del objeto realiza la transformación, pasando como argumentos la secuencia en la que escribir los datos y el objeto a serializar.

El resultado de la serialización anterior es el siguiente:

<?xml version="1.0"?>  
<ReplacedField xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  <Pattern>myPattern</Pattern>  
  <Field>myField</Field>  
  <HasChanged>true</HasChanged>  
</ReplacedField> 

El elemento raíz del documento tiene el nombre de la clase serializada y los nodos hijo...