Serialización y deserialización JSON con C#

En la actualidad los datos JSON se utilizan sobre todo al recibir datos en formato JSON de un servicio web con AJAX y obtener datos de él. Para poder obtener datos en formato JSON o crear texto JSON a partir de un objeto personalizado, usaremos la serialización y la deserialización JSON en C#.


¿Qué es JSON?

JSON (JavaScript Object Notation) es un formato liviano para el intercambio de datos. Es fácil para los humanos leer, escribir, analizar y generar un JSON y es un formato de texto que es completamente independiente del lenguaje.

El formato JSON permite las estructuras de datos siguientes:

  • Colección de pares: nombre/valor, esta estructura de datos es compatible con diferentes lenguajes de programación.
  • Lista ordenada de valores: puede ser una matriz, lista, vector o secuencia, etc.

Ejemplos JSON

  • Objeto

Es un conjunto "nombre/valor" no ordenado. Un objeto comienza con "{" y termina con "}". Detrás de cada "nombre", hay dos puntos. Y la coma se usa para separar más de un "nombre / valor". Por ejemplo,

var usuario = { "nombre" : "Manas" , "género" : "Hombre" , "cumpleaños" : "1987-8-8" }
  • Array

Es un conjunto de valores ordenados. Un Array comienza con "[" y termina con "]"  y los valores están separados por comas. Por ejemplo,

var userlist = [{"user":{"name":"Manas","gender":"Male","birthday":"1987-8-8"}},   

{"user":{"name":"Mohapatra","Male":"Female","birthday":"1987-7-7"}}]
  • String

Es cualquier cantidad de conjunto de caracteres Unicode que se incluye con comillas. Utiliza la barra invertida para identificar las comillas.

var userlist = "{\"ID\":1,\"Name\":\"Manas\",\"Address\":\"India\"}"  

Podemos implementar la Serialización y Deserialización JSON de las siguientes tres maneras:

  • Usando la clase JavaScriptSerializer
  • Usar la clase DataContractJsonSerializer
  • Usando la biblioteca JSON.NET

Usando JavaScriptJsonSerializer

JavaScriptSerializer es una clase que ayuda a serializar y deserializar JSON. Está presente en el espacio de nombres System.Web.Script.Serialization, que está disponible en el ensamblado System.Web.Extensions.dll. Para serializar un objeto .Net a una cadena JSON use el método Serialize. Es posible deserializar la cadena JSON al objeto .Net utilizando los métodos Deserialize <T> o DeserializeObject. Veamos cómo implementar serialización y deserialización usando JavaScriptSerializer.

El siguiente fragmento de código es para declarar una clase personalizada de tipo Blog.

class Blog 
{ 
    public string Name { get; set; } 
    public string Description { get; set; } 
} 

Serialización

En Serialización, convierte un objeto .Net personalizado en una cadena JSON. En el siguiente código, crea una instancia de la clase Blog y asigna algunos valores a sus propiedades. Luego creamos una instancia de JavaScriptSerializer y llamamos al método Serialize() pasando el objeto (Blog). Devuelve datos JSON en formato de cadena.

// Creating Blog object 
Blog bsObj = new Blog () 
{ 
   Name = "estradawebgroup",
   Description = "Compartir conocimiento" 
}; 

 

// Serializing object to json data 

JavaScriptSerializer js = new JavaScriptSerializer(); 
string jsonData = js.Serialize(bsObj); // {"Name":" estradawebgroup ","Description":" Compartir conocimiento "}

 

Deserialización

En la deserialización, hace lo contrario de la serialización, lo que significa que convierte una cadena JSON en un objeto .Net personalizado. En el siguiente código, crea la instancia de JavaScriptSerializer y llama a Deserialize () pasando datos JSON. Devuelve un objeto personalizado (Blog) a partir de datos JSON.

// Deserializing json data to object 
JavaScriptSerializer js = new JavaScriptSerializer(); 
Blog blogObject = js.Deserialize<Blog>(jsonData); 
string name = blogObject.Name; 
string description = blogObject.Description;   

// Other way to whithout help of Blog class 
dynamic blogObject = js.Deserialize<dynamic>(jsonData); 
string name = blogObject["Name"]; 
string description = blogObject["Description"]; 

 

Usando DataContractJsonSerializer

La clase DataContractJsonSerializer también ayuda a serializar y deserializar JSON. Está presente en el espacio de nombres System.Runtime.Serialization.Json, que está disponible en el ensamblado System.Runtime.Serialization.dll. Usando la clase podemos serializar un objeto en datos JSON y deserializar datos JSON en un objeto.

Digamos que hay una clase Empleados con propiedades como el nombre, la dirección y los valores de propiedad también asignados. Ahora podemos convertir la instancia de clase Empleados a JSON. Este JSON se puede deserializar en la clase Empleado u otra clase con una definición de datos equivalente. Los siguientes fragmentos de código demuestran la serialización y deserialización.

Creemos una clase personalizada de Blog para serialización y deserialización,

[DataContract] 
class Blog 
{ 
    [DataMember] 
    public string Name { get; set; } 
   [DataMember] 
    public string Description { get; set; } 
} 

Serialización

En Serialización, convierte un objeto .Net personalizado en una cadena JSON. En el siguiente código, crea una instancia de la clase Blog y asigna valores a sus propiedades. A continuación, creamos una instancia de la clase DataContractJsonSerializer pasando el parámetro Blog y creando una instancia de la clase MemoryStream para escribir el objeto (Blog). Por último, crea una instancia de la clase StreamReader para leer los datos JSON del objeto MemorySteam.

Blog bsObj = new Blog () 
{ 
    Name = "estradawebgroup", 
    Description = " Compartir conocimiento " 
}; 
DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Blog)); 
MemoryStream msObj = new MemoryStream(); 
js.WriteObject(msObj, bsObj); 
msObj.Position = 0;  
StreamReader sr = new StreamReader(msObj); 
// "{\"Description\":\" Compartir conocimiento \",\"Name\":\"estradawebgroup\"}" 
string json = sr.ReadToEnd();    
sr.Close(); 
msObj.Close(); 

 

Deserialización

En la deserialización, hace lo contrario de la serialización, lo que significa que convierte una cadena JSON en un objeto .Net personalizado. En el siguiente código, crea una instancia de la clase Blog y asigna valores a sus propiedades. A continuación, creamos una instancia de la clase DataContractJsonSerializer pasando el parámetro clase Blog y creando una instancia de la clase MemoryStream para escribir el objeto (Blog). Por último, crea una instancia de la clase StreamReader para leer los datos JSON del objeto MemorySteam.

string json = "{\"Description\":\" Compartir conocimiento \",\"Name\":\"estradawebgroup\"}"; 
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(json))) 
{ 
   // Deserialization from JSON 
   DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(Blog)); 
   Blog bsObj2 = (Blog)deserializer.ReadObject(ms); 
   Response.Write("Name: " + bsObj2.Name); // Name: estradawebgroup
   Response.Write("Description: " + bsObj2.Description); // Description: Compartir conocimiento 
} 

Usando Json.NET

Json.NET es una biblioteca de terceros que ayuda a la conversión JSON y un objeto .NET utilizando JsonSerializer. El JsonSerializer convierte los objetos .NET en su texto equivalente a JSON y viceversa asignando los nombres de las propiedades del objeto .NET a los nombres de las propiedades JSON. Es una biblioteca de código abierto y gratuito para fines comerciales.

Las siguientes son algunas características que creo son increíbles,

  • Serializador JSON flexible para la conversión entre objetos .NET y JSON.
  • Convierte de LINQ a JSON para leer y escribir JSON manualmente.
  • Alto rendimiento, más rápida que las librerías integradas en .NET.
  • Fácil de leer JSON.
  • Convierte JSON desde XML.
  • La puedes utilizar en .NET 2, .NET 3.5, .NET 4, Silverlight, Windows Phone, Xamarin, etc.

Comencemos aprendiendo cómo instalar e implementar:

En Visual Studio, vaya a Herramientas del menú -> Seleccionar Library Package Manager -> Package Manager Console. Abre una ventana de comando donde tenemos que poner el siguiente comando para instalar la librería Newtonsoft.Json.

Install-Package Newtonsoft.Json

O

En Visual Studio, menú Herramientas -> Gestionar solución Nuget Package Manger y escriba "JSON.NET" para buscar en línea. Aquí está la figura,

Serialización

En Serialización, convierte un objeto .Net personalizado en una cadena Json. En el siguiente código, crea una instancia de la clase Blog y asigna algunos valores a sus propiedades. Luego llama al método estático SerializeObject () de la clase JsonConvert pasando el objeto (Blog). Devuelve datos JSON en formato de cadena.

// Creating Blog object 
Blog bsObj = new Blog () 
{ 
    Name = "estradawebgroup", 
    Description = "Compartir conocimiento" 
}; 
// Convert Blog object to JOSN string format 
string jsonData = JsonConvert.SerializeObject(bsObj); 
Response.Write(jsonData); 

Deserialización

En la deserialización, hace lo contrario a la serialización, lo que significa que convierte una cadena JSON en un objeto .Net personalizado. En el siguiente código, llama al método estático DeserializeObject () de la clase JsonConvert pasando datos JSON. Devuelve un objeto personalizado (Blog) a partir de datos JSON.

string json = @ "{
'Nombre' : 'estradawebgroup’,
'Descripción' : 'Compartir conocimiento'
} ";
Blog bsObj = JsonConvert.DeserializeObject <Blog> (json);
Response.Write (bsObj.Name);
Artículos relacionados
1 Comentarios
  • manuel Comentar
    Wednesday, October 31, 2018

    excelente, muy buen aporte

Enviame un comentario