Etiquetas

, ,

json

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.