
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.
¿Qué es Serialización?
En ciencias de la computación, la serialización (o marshalling en inglés) consiste en un proceso de codificación de un objeto en un medio de almacenamiento (como puede ser un archivo, o un buffer de memoria) con el fin de transmitirlo a través de una conexión en red como una serie de bytes o en un formato humanamente más legible como XML o JSON, entre otros.
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);