2012-03-27 9 views
6

Contexto
Idioma: C#
Plataforma Versión: Microsoft .Net Framework 4.0
Sistema operativo: Windows 7 Professional (64 bits)
Restricciones: Microsoft MVC.Net 3.0prettified JSON de MVC 3 JsonResult

Problema
me encuentro mirando JSON mucho en estos días un navegador, un navegador apuntando a la una Acción controlador u otro en mi servidor dev local y analizar JS ON visualmente para asegurarnos de que todo está siendo formateado de la manera que queremos. El JSON devuelto por el serializador MVC 3 (o el serializador JSON.Net) siempre devuelven una cadena minified, por lo que terminan con algo como esto:

{"Bars":[{"Name":"Ghost Bar","Address":"2440 Victory Park Lane, 33rd Floor, Dallas, TX 75219","OpenDate":"\/Date(1208062800000)\/","Status":"Open"},{"Name":"M-Street Bar","Address":"5628 Sears Street, Dallas, TX 75206","OpenDate":"\/Date(1064811600000)\/","Status":"Closed"},{"Name":"Zephyr\u0027s Lounge","Address":"3520 Greenville Avenue, Dallas, TX 75206","OpenDate":"\/Date(981007200000)\/","Status":"Open"}]} 

Pregunta
Me gustaría mucho encontrar una manera, al menos durante la depuración, para obtener el JsonResult sea "prettified" para que se vea de la misma familia:

{ 
    "Bars": [ 
    { 
     "Name": "Ghost Bar", 
     "Address": "2440 Victory Park Lane, 33rd Floor, Dallas, TX 75219", 
     "OpenDate": "\/Date(1208062800000)\/", 
     "Status": "Open" 
    }, 
    { 
     "Name": "M-Street Bar", 
     "Address": "5628 Sears Street, Dallas, TX 75206", 
     "OpenDate": "\/Date(1064811600000)\/", 
     "Status": "Closed" 
    }, 
    { 
     "Name": "Zephyr\u0027s Lounge", 
     "Address": "3520 Greenville Avenue, Dallas, TX 75206", 
     "OpenDate": "\/Date(981007200000)\/", 
     "Status": "Open" 
    } 
    ] 
} 

soy consciente de severalonlinetools que te permitirá pegar y formatear JSON. El es un paso extra y me está costando mucho tiempo. Preferiría una solución programática. También me gustaría poder activarlo/desactivarlo a través de la configuración o una directiva #if compilador.

Ya hice una búsqueda superficial al respecto y me encontré con this post on Stack Overflow. Sin embargo, el ejemplo de código dado es bastante incompleto. También hay un par de enlaces proporcionados, pero parecen estar muertos.

En cualquier caso, me gustaría encontrar una manera de obtener JSON "embellecido" de un ActionResult. Cualquier ayuda aprendida

El siguiente código fuente reproducirá la cadena JSON inicial no pretendida que di como ejemplo. Siéntase libre de copiar/pegar/editar.

using System.Collections.Generic; 
using System.Text; 
using System.Web.Mvc; 

namespace PrettyJsonResult.Controllers 
{ 
    public class DefaultController : Controller 
    { 
     public JsonResult Index() 
     { 
      var foo = new Foo(); 
      foo.Bars.Add(new Bar { Address = "2440 Victory Park Lane, 33rd Floor, Dallas, TX 75219", Name = "Ghost Bar", Status = "Open" }); 
      foo.Bars.Add(new Bar { Address = "5628 Sears Street, Dallas, TX 75206", Name = "M-Street Bar", Status = "Closed" }); 
      foo.Bars.Add(new Bar { Address = "3520 Greenville Avenue, Dallas, TX 75206", Name = "Zephyr's Lounge", Status = "Open" }); 

      return Json(foo, "application/json", Encoding.UTF8, JsonRequestBehavior.AllowGet); 
     } 

    } 

    public class Foo 
    { 
     public Foo() 
     { 
      Bars = new List<Bar>(); 
     } 

     public List<Bar> Bars { get; set; } 
    } 

    public class Bar 
    { 
     public string Name { get; set; } 
     public string Address { get; set; } 
     public string Status { get; set; } 
    } 
} 
+1

¿Qué hay de usar una extensión de navegador (por ejemplo, https://addons.mozilla.org/en-US/firefox/addon/jsonview/) que automáticamente embellece el contenido de 'application/json'? – pjumble

+1

Tanto la herramienta de desarrollo integrada de Chrome como Firebug ahora tienen un modo de vista previa que automáticamente le da una buena vista jerárquica de JSON devuelto por el servidor. – StriplingWarrior

+0

Hola chicos. Gracias por todas las buenas respuestas. También encontré un Visual Studio Visualizer que te permite formatear JSON dentro de Visual Studio.He jugado un poco con esto y lo tengo trabajando en Studio 2010. http://jsonviewer.codeplex.com/wikipage?title=More%20screen%20shots&referringTitle=Home –

Respuesta

15

No hay mucho de una respuesta, pero si se cambia el serializador JSON desde el construido en uno (JavaScriptSerializer) a Json.NET (que tiene un montón de advantages allá de este número), se puede hacer algo como esto:

JsonConvert.SerializeObject(myObjectDestinedForJSON, Formatting.Indented); 

Docs en la configuración aquí: http://james.newtonking.com/projects/json/help/

+0

El built-in no es 'DataContractSerializer'. Es 'JavaScriptSerializer'. –

+0

duh! dedos gordos. – EBarr

+0

Hace exactamente lo que pedí. Súper simple. Gracias. La nueva versión de Studio se enviará con JSON.Net como el serializador de todos modos, así que no me quitaré la piel de encima para cambiar. –

Cuestiones relacionadas