PARTE I: DOMINA EL DISEÑO DE UNA API
PARTE II: ARQUITECTURAS Y CONTROLADORES API
LABORATORIOS ¡Aplica ya! : DISEÑO Y VARIANTES API CON INMEMORY Y SQL SERVER

¿Qué es el proceso de serialización?

   Después de esta lección

Aprenderás a:

  • Comprender el significado del proceso de Serialización.
  • Conocer los usos de la serialización con .Net.
  • Conocer la serialización de JSON.
  • Conocer la serialización de XML.
  • Convertir un objeto en serializable.

Cursos Institucionales.
El Aprendizaje Hecho Fácil. ¡Disfrútalo!

   Laboratorios ¡Aplica ya!


El material teórico de las lecciones se aplica en los videos tutoriales del curso.

El proceso de serialización

Fuente base: Microsoft.


APIS - SERIALIZACIÓN - EASY TO MAKE

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. Su propósito principal es guardar el estado de un objeto para poder volver a crearlo cuando sea necesario. El proceso inverso se denomina deserialización.

El objeto se serializa en una secuencia que incluye los datos. La secuencia también puede tener información sobre el tipo del objeto, como la versión, la referencia cultural y el nombre del ensamblado. A partir de esa secuencia, el objeto se puede almacenar en una base de datos, en 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 según sea necesario, ya que proporciona almacenamiento de los objetos e intercambio de datos. A través de la serialización, un desarrollador puede realizar acciones como las siguientes:

  • Enviar el objeto a una aplicación remota mediante un servicio web.
  • Pasar un objeto de un dominio a otro.
  • Pasar un objeto a través de un firewall como una cadena JSON o XML.
  • Mantener la seguridad o información específica del usuario entre aplicaciones.

Serialización de JSON en .Net 


Como parte de los namespace y sus librerías encontramos en .Net la clase   DataContractJsonSerializer especializada en Serializa objetos a JavaScript Object Notation (JSON) y deserializar datos de JSON al objeto original, de la forma:

public sealed class DataContractJsonSerializer : System.Runtime.
Serialization.XmlObjectSerializer

   EL NAMESPACE System.Text.Json

En la mayoría de los escenarios que implican serializar y deserializar JSON, se recomiendan las API del espacio de nombres System.Text.Json. Este contiene clases especializadas para la serialización y deserialización de notación de objetos JavaScript (JSON).

EJEMPLO  
Vamos a crear el tipo RegistroMatricula con las siguientes propiedades:

  1. RegistroID.
  2. PrecioMatricula.
  3. FechaRegistro.

Tendríamos nuestro tipo como un contrato de datos así, (repasa la lección de contratos aquí):

[DataContract]
class RegistroMatricula
{
    [DataMember]
    internal string RegistroID;

    [DataMember]
    internal int Precio;
    
    [DataMember]
    internal Date FechaReg;
} 

Para serializar una instancia del tipo RegistroMatricula a JSON, debemos crear primero un objeto de tipo DataContractJsonSerializer y hacer uso de uno de sus método para escribir los datos en formato JSON, esto es, el método WriteObject. Tendríamos el siguiente código:

//Instanciamos la clase
RegistroMatricula ObjReg = new RegistroMatricula();

//Configuramos el Objeto...
MemoryStream ObjCadena = new MemoryStream();

//Aplicamos la serialización
DataContractJsonSerializer ObjSerializar = new DataContractJsonSerializer
    (typeof(RegistroMatricula));
ObjSerializar.WriteObject(ObjCadena, ObjReg); 

La secuencia JSON tendría este aspecto:

{"RegistroID":"reg-012-101","Precio":"79", "FechaReg":"2022-01-15"}

DESERIALIZACIÓN  

Una vez el objeto serializado ha sido enviado a la fuente o destino, el algoritmo de la aplicación debe deserializarlo a partir de los datos de JSON contenidos en el objeto. Se reversa la secuencia y se llama a ReadObject.  El objeto ObjSerializar contendra los datos original deserializados en formato JSON nuevamente. La deserialización de nuestro objeto serializado RegistroMatricula sería así:

RegistroMatricula ObjDeserializar = 
(RegistroMatricula )ObjSerializar.ReadObject(ObjCadena); 

Serialización XML


El espacio de nombres System.Runtime.Serialization contiene clases para la serialización y deserialización binaria y XML. 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. En la serialización binaria se serializan todos los miembros, incluso aquellos que son de solo lectura, y mejora el rendimiento. Microsoft.

   El namespace System.Xml.Serialization contiene clases para serializar y deserializar 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. Microsoft.

Haciendo uso de nuestro tipo RegistroMatricula tenemos:
RegistroMatricula ObjReg = new RegistroMatricula();  
        ObjReg.title = "Procesando la serialización XML...";  
        System.Xml.Serialization.XmlSerializer ObjCadena =
            new System.Xml.Serialization.XmlSerializer(typeof(RegistroMatricula)); 

DESERIALIZACIÓN DE UN OBJETO XML
Como parte de las bibliotecas de .Net C#, tenemos a mano la clase XmlSerializer. En este ejemplo se deserializan los datos del objetos RegistroMatricula creado anteriormente. Solo se deserializan las propiedades y los campos públicos:


    System.Xml.Serialization.XmlSerializer ObjDeserializar =
        new System.Xml.Serialization.XmlSerializer(typeof(RegistroMatricula));  
    System.IO.StreamReader objFile = new System.IO.StreamReader(  
        @"c:\temp\miArchivoSerializado.xml");  
    RegistroMatricula overview =  
    (RegistroMatricula)ObjDeserializar.Deserialize(objFile);  
    objFile.Close();   

En el código anterior, debemos reemplazar la cadena de la ubicación local o remota del recurso a deserializar.

   En resumen

ASP.NET Core serializa automáticamente el objeto a JSON y escribe el JSON en el cuerpo del mensaje de respuesta. El código de respuesta de este tipo de valor devuelto es 200 OK, suponiendo que no haya ninguna excepción no controlada. Las excepciones no controladas se convierten en errores 5xx.

APLICA YA! - Easy To Make   EASY INTERACTIVO.  ¡Intentalo! Afina tus conocimientos.