JSON es un formato de intercambio ligero que al igual que el XML puede ser leído fácilmente y es independiente de la plataforma, esta basado en sub conjunto de javascript por esta razón puede ser convertido a javascript rápidamente y por lo tanto es ideal para aplicaciones Web basadas en AJAX, pero la ventaja de JSON sobre AJAX es que es capas de representar la misma información en un formato mas ligero que el XML y por lo tanto es mas rápido de transportar y consume menos ancho de banda.
Un ejemplo de un objeto serializado con ambos formatos:
Con XML:
<Product>
<ProductID>1</ProductID>
<ProductCode>p_1</ProductCode>
<ProductName>a Product 1</ProductName>
</Product>
Con JSON:
{«ProductID»:1,»ProductName»:»a Product 1″}
Como podemos ver con JSON nos ahorramos una cantidad de información que no es necesaria que viaje en las peticiones que hacemos por ejemplo a un Web services. Así que veamos que necesitamos para que nuestro servicio Web se comunique a través de JSON.
-Primero necestaremos que en nuestro archivo web.config contiene la sección correspondiente del objeto ScriptJsonSerializationSection
<section name=»jsonSerialization»
type=»System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35″
requirePermission=»false» allowDefinition=»Everywhere»/>
-Segundo configuraremos la clase de nuestro servicio Web para que use el atributo [System.Web.Script.Services.ScriptService]
[System.Web.Script.Services.ScriptService]
public class SimpleWebService : System.Web.Services.WebService
{
[WebMethod]
public string GetServerTime()
{
string serverTime =
String.Format(«The current time is {0}.», DateTime.Now);
return serverTime;
}
}
-Tercero indicaremos a nuestro Web method el formato que utilizara con el atributo [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetServerTime()
{
string serverTime =
String.Format(«The current time is {0}.», DateTime.Now);
return serverTime;
}
Si queremos enviar objetos ya serializado en JSON para ser consumidos desde javascript podemos hacerlo de la siguiente manera
DataContractJsonSerializer serializer = new
DataContractJsonSerializer(yourObject.GetType());
//Creo un memory stream
MemoryStream ms = new MemoryStream();
//serializo el objeto en el Memory Steam
serializer.WriteObject(ms, yourObject);
//Convierto el objeto serializado en un string
string jsonString = Encoding.Default.GetString(ms.ToArray());
//close the memory stream
ms.Close();
Para deserializar un objeton tambien es muy sencillo, imaginemos que recibimos el objeto persona
MemoryStream ms = new MemoryStream();
DataContractJsonSerializer ser =
new DataContractJsonSerializer(typeof(Persona));
ms.Position = 0;
Persona p = (Persona)ser.ReadObject(ms);
Con la utilizacion de JSON vemos como podemos disminuir de manera considerable la cantidad de datos que enviamos y recibimos al servidor lo cual convierte a nuestra aplicacion en un sistema mucho mas escalabre y que respondera mucho mejor ante una sobre carga de usuarios.
Pingback: Llamando a servicios Web desde javascript usando el ScriptManager « High Scalability