2012-03-27 5 views
6

Контекст
Язык: C#
Версия платформы: Microsoft .Net Framework 4.0
Операционная система: Windows 7 Professional (64-разрядная версия)
Ограничения: Microsoft MVC.Net 3,0Получить Prettified JSON из MVC 3 JsonResult

Проблема
Я считаю, что смотрит на JSON много в браузере в эти дни, указывая браузер на один контроллер действиях или другой на моем локальном сервере Dev и разбор JS ON визуально, чтобы убедиться, что все отформатировано так, как мы хотим. JSON, возвращаемый MVC 3 сериализатором (или сериализатору JSON.Net) всегда возвращает уменьшенная строку, так что ветер с чем-то вроде этого:

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

Вопрос
Я бы очень хотел, чтобы найти способ, по крайней мере, во время отладки, чтобы получить JsonResult быть «prettified», так что это больше похоже на это:

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

Я знаю severalonlinetools, который позволит вам вставлять и форматировать JSON. Это дополнительный шаг, и мне очень много времени. Я бы предпочел программное решение. Я также хотел бы включить/выключить его через конфигурацию или директиву компилятора #if.

Я уже провел беглый поиск по этому вопросу и наткнулся на this post on Stack Overflow. Однако приведенный пример кода довольно неполный. Есть также пара ссылок, но они кажутся мертвыми.

В любом случае, я хотел бы найти способ получить «превосходный» JSON из ActionResult. Любая помощь, связанная с объявлением.

Следующий исходный код воспроизведет начальную строку с незащищенным JSON, указанную в качестве примера. Не стесняйтесь копировать/вставлять/редактировать.

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

Что касается использования расширения браузера (например, https://addons.mozilla.org/en-US/firefox/addon/jsonview/), которое автоматически префикс содержимого 'application/json'? – pjumble

+1

Как встроенный инструмент разработчика Chrome, так и Firebug теперь имеют режим предварительного просмотра, который автоматически дает вам хороший иерархический вид JSON, возвращаемого с сервера. – StriplingWarrior

+0

Эй, ребята. Спасибо за все замечательные ответы. Я также нашел Visualizer Visualizer, который позволяет форматировать JSON в Visual Studio.Я немного поиграл с ним, и он работает в Studio 2010. http://jsonviewer.codeplex.com/wikipage?title=More%20screen%20shots&referringTitle=Home –

ответ

15

Не так много ответа, но если вы переключите JSon сериалайзер от встроенного в одном (JavaScriptSerializer) до Json.NET (который имеет кучу advantages за пределами этого вопроса), вы можете сделать что-то вроде этого:

JsonConvert.SerializeObject(myObjectDestinedForJSON, Formatting.Indented); 

Docs на настройки: http://james.newtonking.com/projects/json/help/

+0

Встроенный не является 'DataContractSerializer'. Это «JavaScriptSerializer». –

+0

duh! толстые пальцы. – EBarr

+0

В точности, что я спросил. Супер простой. Благодарю. Новая версия Studio в любом случае будет поставляться с JSON.Net в качестве сериализатора, поэтому скин с моей стороны не переключится. –

Смежные вопросы