6

コンテキスト
言語: C#
プラットフォーム バージョン: Microsoft .Net Framework 4.0
オペレーティング システム: Windows 7 Professional (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"
    }
  ]
}

JSON を貼り付けてフォーマットできるオンラインツールがいくつか あることは知っています。これは余分なステップであり、多くの時間を費やしています。私はプログラムによる解決策を好むでしょう。また、構成または #if コンパイラ ディレクティブを介してオン/オフできるようにしたいと考えています。

私はすでにこれに関する大まかな検索を行っており、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; }
    }
}
4

2 に答える 2

16

答えはあまりありませんが、Json シリアライザーを組み込みのもの (JavaScriptSerializer) からJson.NET (この問題以外にも多くの利点があります) に切り替えると、次のようなことができます。

JsonConvert.SerializeObject( myObjectDestinedForJSON, Formatting.Indented);

ここの設定に関するドキュメント: http://james.newtonking.com/projects/json/help/

于 2012-03-27T23:20:30.170 に答える
4

実用的ですべての状況に役立ちます:

chrome +この拡張機能を使用してください:https ://chrome.google.com/webstore/detail/chklaanhfefbnpoihckbnefhakgolnmc

これは、JSONがjsonであることに気付いたときに、JSONをきれいにフォーマットします。

于 2012-03-28T11:59:13.493 に答える