Получить предварительный JSON от MVC 3 JsonResult - PullRequest
6 голосов
/ 28 марта 2012

Context Язык: C #Версия платформы: Microsoft .Net Framework 4.0Операционная система: Windows 7 Professional (64-разрядная версия)Ограничения: Microsoft MVC.Net 3.0

Проблема Сейчас я часто смотрю на JSON в браузере, нацелив браузер на одно или другое действие контроллера на моем локальном dev-сервере и визуально анализируя JSON, чтобы убедиться, что все форматируется так, как мы хотим.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 был «предварительно сертифицирован» так, чтобы он выглядел примерно так:

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

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

Я уже сделал краткий поиск по этому поводу и наткнулся на это сообщение наПереполнение стека .Однако приведенный пример кода является неполным.Также есть несколько ссылок, но они кажутся мёртвыми.

В любом случае, я бы хотел найти способ получить «предварительно подтвержденный» 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; }
    }
}

Ответы [ 2 ]

15 голосов
/ 28 марта 2012

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

JsonConvert.SerializeObject( myObjectDestinedForJSON, Formatting.Indented);

Документы по настройкам здесь: http://james.newtonking.com/projects/json/help/

4 голосов
/ 28 марта 2012

Прагматично и полезно для всех ситуаций:

Используйте chrome + это расширение: https://chrome.google.com/webstore/detail/chklaanhfefbnpoihckbnefhakgolnmc

это будет довольно форматировать JSON, когда он поймет, что это json.

...