2012-03-27 2 views
6

Contexte
Langue: C#
Plate-forme Version: Microsoft .Net Framework 4.0
Système d'exploitation: Windows 7 Professionnel (64 bits)
Contraintes: Microsoft MVC.Net 3.0Get enjolivé JSON MVC 3 JsonResult

problème
je me trouve en regardant JSON beaucoup dans un navigateur ces jours-ci, pointant un navigateur à une action de contrôleur ou d'une autre sur mon serveur dev local et l'analyse syntaxique JS ON visuellement pour s'assurer que tout est formaté comme nous le voulons. Le JSON renvoyé par le sérialiseur MVC 3 (ou le sérialiseur JSON.Net) reviennent toujours une chaîne minified, donc je serpentent avec quelque chose comme ceci:

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

Question
Je voudrais vraiment trouver un moyen, au moins pendant le débogage, pour obtenir le JsonResult d'être « enjolivé » pour qu'il ressemble plus à ceci:

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

Je suis conscient de severalonlinetools qui vous permettra de coller et de mettre en forme JSON. C'est une étape supplémentaire, et cela me coûte beaucoup de temps. Je préférerais une solution programmatique. J'aimerais aussi pouvoir l'activer/désactiver via la configuration ou une directive de compilation #if. J'ai déjà fait une recherche rapide à ce sujet et j'ai rencontré this post on Stack Overflow Cependant, l'exemple de code donné est assez incomplet. Il y a aussi quelques liens fournis mais ils semblent être morts.

Dans tous les cas, j'aimerais trouver un moyen d'obtenir JSON "prétendu" d'un ActionResult. Toute aide appredciated.

Le code source suivant reproduira la chaîne JSON initiale non-justifiée que j'ai donnée à titre d'exemple. N'hésitez pas à copier/coller/modifier.

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'en est-il de l'utilisation d'une extension de navigateur (par exemple, https://addons.mozilla.org/en-US/firefox/addon/jsonview/) qui simule automatiquement le contenu 'application/json'? – pjumble

+1

L'outil de développement intégré de Chrome et Firebug disposent désormais d'un mode de prévisualisation qui vous donne automatiquement une vue hiérarchique du JSON renvoyé par le serveur. – StriplingWarrior

+0

Salut les gars. Merci pour toutes les bonnes réponses. J'ai également trouvé un Visual Studio Visualizer qui vous permet de mettre en forme JSON dans Visual Studio.J'ai un peu joué avec cela et je l'ai fait fonctionner dans Studio 2010. http://jsonviewer.codeplex.com/wikipage?title=More%20screen%20shots&referringTitle=Home –

Répondre

15

Pas grand-chose d'une réponse, mais si vous passez votre sérialiseur Json de la construction dans un (JavaScriptSerializer) à Json.NET (qui a un tas de advantages au-delà de cette question), vous pouvez faire quelque chose comme ceci:

JsonConvert.SerializeObject(myObjectDestinedForJSON, Formatting.Indented); 

Docs sur les paramètres ici: http://james.newtonking.com/projects/json/help/

+0

Le built-in n'est pas 'DataContractSerializer'. C'est 'JavaScriptSerializer'. –

+0

duh! gros doigts. – EBarr

+0

Fait exactement ce que j'ai demandé. Super simple. Merci. La nouvelle version de Studio sera livrée avec JSON.Net en tant que sérialiseur de toute façon, donc pas de peau sur mon dos pour passer. –