【问题标题】:Get Prettified JSON from MVC 3 JsonResult从 MVC 3 JsonResult 获取美化 JSON
【发布时间】:2012-03-27 22:52:24
【问题描述】:

上下文
语言:C#
平台版本:Microsoft .Net Framework 4.0
操作系统:Windows 7 专业版(64 位)
约束:Microsoft MVC.Net 3.0

问题
这些天,我发现自己经常在浏览器中查看 JSON,将浏览器指向本地开发服务器上的一个或另一个控制器操作,并以可视方式解析 JSON,以确保所有内容都按照我们想要的方式进行格式化。 MVC 3 序列化程序(或 JSON.Net 序列化程序)返回的 JSON 总是返回一个缩小的字符串,所以我最终得到这样的结果:

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

我知道 several online tools 可以让您粘贴和格式化 JSON。这是一个额外的步骤,并且花费了我很多时间。我更喜欢程序化解决方案。我还希望能够通过配置或#if 编译器指令打开/关闭它。

我已经对此进行了粗略的搜索并遇到了this post on Stack Overflow。但是,给出的代码示例非常不完整。还提供了几个链接,但它们似乎已失效。

无论如何,我想找到一种从 ActionResult 中获取“美化”JSON 的方法。任何帮助表示赞赏。

以下源代码将重现我作为示例给出的初始未美化的 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; }
    }
}

【问题讨论】:

  • 使用自动美化application/json内容的浏览器扩展(例如addons.mozilla.org/en-US/firefox/addon/jsonview)怎么样?
  • Chrome 的内置开发工具和 Firebug 现在都有一个预览模式,可以自动为您提供从服务器返回的 JSON 的层次结构视图。
  • 大家好。感谢所有伟大的回应。我还发现了一个 Visual Studio Visualizer,它可以让您在 Visual Studio 中格式化 JSON。我对它进行了一些尝试,并让它在 Studio 2010 中运行。jsonviewer.codeplex.com/…

标签: c# json asp.net-mvc jsonresult


【解决方案1】:

答案不多,但是如果您将 Json 序列化器从内置的 (JavaScriptSerializer) 切换到 Json.NET(在此问题之外还有一堆 advantages),您可以执行以下操作:

JsonConvert.SerializeObject( myObjectDestinedForJSON, Formatting.Indented);

有关设置的文档:http://james.newtonking.com/projects/json/help/

【讨论】:

  • 内置的不是DataContractSerializer。是JavaScriptSerializer
  • 完全符合我的要求。超级简单。谢谢。无论如何,新版本的 Studio 将与 JSON.Net 作为序列化程序一起发布,所以我没有皮肤可以切换。
  • 你知道,我记得 Scott Gu 在一次关于 WebAPI 的演讲中展示了漂亮的印刷品。我回去扫描视频并找不到它,所以我没有提及它。在第 36 分钟左右,他开始了 - channel9.msdn.com/Events/TechDays/Techdays-2012-the-Netherlands/…
【解决方案2】:

实用且适用于所有情况:

使用 chrome + 这个扩展:https://chrome.google.com/webstore/detail/chklaanhfefbnpoihckbnefhakgolnmc

当它意识到它是 json 时,它将漂亮地格式化 JSON。

【讨论】:

    猜你喜欢
    • 2016-08-23
    • 2023-03-18
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2011-10-15
    • 2011-09-30
    相关资源
    最近更新 更多