lunes, junio 03, 2013

Obtener Json en vez de XML (o al revés) en ASP.NET Web API

ASP.NET Web API permite retornar XML ó Json modificando los parámetros adecuados en el Application_Start() del Global.asax. Así por ejemplo:
    GlobalConfiguration.Configuration.Formatters.Remove( GlobalConfiguration.Configuration.Formatters.JsonFormatter );
elimina el formato Json y por lo tanto siempre retorna xml. Otras posibilidades son:
    GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true; //Retorna json!!!???
    GlobalConfiguration.Configuration.Formatters.JsonFormatter.UseDataContractJsonSerializer = true;     
    GlobalConfiguration.Configuration.Formatters.Add(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
     GlobalConfiguration.Configuration.Formatters.Add(GlobalConfiguration.Configuration.Formatters.JsonFormatter);
Si no se cambia esta configuración en el Application_Start(), el retorno será Json ó xml dependiendo del request header 
enviado. Así, si por ejemplo utilizamos el Internet Explorer para probar el web api implementado, el resultado lo obtendremos 
en un fichero en formato json, mientras que si lo probamos con Firefox o Chrome el resultado lo obtendremos en formato 
xml. Esto es porque cada uno de los navegadores envía un request header diferente. 
Lo mismo ocurrirá con 
nuestra aplicación cliente: dependiendo del request header que use, la aplicación servidor web api retornará un formato 
u otro (json ó xml). Así si queremos forzar a que nos retorne json habría que forzar Accept: json/xml en el request header, 
mientras que si nos interesa xml habría que forzar Accept: text/xml ó Accept: application/xml.
Si nos interesa utilizar como cliente un navegador web, habría que hacer algo similar utilizando alguna extensión. Por 
ejemplo, para Chrome podemos utilizar la extensión Header Hacker que nos permite configurar los request headers. Para 
obtener json (que es más legible) habría que añadir una línea para reemplazar:
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
por:
    Accept: json/xml

De forma análoga, para Firefox se puede utilizar la extensión Modify Headers.

No hay comentarios:

Publicar un comentario