2012-03-27 11 views
6

Contesto
Lingua: C#
Versione Piattaforma: Microsoft .Net Framework 4.0
Sistema operativo: Windows 7 Professional (64 bit)
Vincoli: Microsoft MVC.Net 3.0Get imbellettati JSON da MVC 3 JsonResult

Problema
mi ritrovo a guardare JSON un sacco in un browser in questi giorni, puntando un browser in una sola azione controller o un altro sul mio server dev locale e parsing JS ON visivamente per assicurarsi che tutto sia formattato nel modo che vogliamo. Il JSON restituito dal MVC 3 serializzatore (o il serializzatore JSON.Net) restituiscono sempre una stringa minified, così ho vento con qualcosa di simile:

{"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"}]} 

Domanda
Mi piacerebbe davvero trovare un modo, almeno durante il debug, per ottenere il JsonResult di essere "prettified" in modo che sembra più simile a questo:

{ 
    "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" 
    } 
    ] 
} 

sono a conoscenza di severalonlinetools che ti permetterà di incollare e formattare JSON. È un passo in più e mi costa molto tempo. Preferirei una soluzione programmatica. Mi piacerebbe anche essere in grado di accenderlo/spegnerlo tramite la configurazione o una direttiva del compilatore #if.

Ho già fatto una ricerca rapida su questo e ho trovato this post on Stack Overflow. Tuttavia, l'esempio di codice fornito è piuttosto incompleto. Ci sono anche un paio di collegamenti forniti ma sembrano morti.

In ogni caso, mi piacerebbe trovare un modo per ottenere JSON "ottimizzato" da ActionResult. Qualsiasi aiuto apprendiato.

Il seguente codice sorgente riprodurrà la stringa JSON iniziale non specificata che ho fornito come esempio. Sentiti libero di copiare/incollare/modificare.

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

Che dire dell'utilizzo di un'estensione del browser (ad esempio https://addons.mozilla.org/en-US/firefox/addon/jsonview/) che prlifica automaticamente il contenuto di 'application/json'? – pjumble

+1

Sia lo strumento di sviluppo integrato di Chrome che Firebug dispongono ora di una modalità di anteprima che offre automaticamente una bella vista gerarchica del JSON restituito dal server. – StriplingWarrior

+0

Ehi ragazzi. Grazie per tutte le belle risposte. Ho anche trovato Visual Studio Visualizer che ti permette di formattare JSON in Visual Studio.Ho giocato un po 'con esso, e lo faccio funzionare in Studio 2010. http://jsonviewer.codeplex.com/wikipage?title=More%20screen%20shots&referringTitle=Home –

risposta

15

Non c'è molto di una risposta, ma se si passa il vostro serializzatore JSON dal sviluppato in uno (JavaScriptSerializer) per Json.NET (che ha un sacco di advantages al di là di questo numero), si può fare qualcosa di simile:

JsonConvert.SerializeObject(myObjectDestinedForJSON, Formatting.Indented); 

Documenti sulle impostazioni qui: http://james.newtonking.com/projects/json/help/

+0

Quello integrato non è 'DataContractSerializer'. È 'JavaScriptSerializer'. –

+0

duh! dita grasse. – EBarr

+0

Fa esattamente quello che ho chiesto. Super semplice. Grazie. La nuova versione di Studio verrà distribuita con JSON.Net come serializzatore in ogni caso, quindi non togliermi la pelle di dosso. –

Problemi correlati