C# で JSON 文字列を見やすく整形する方法(Json.NET)

C#JSON 文字列を見やすく整形できるライブラリをずっと探していてやっと見つけた。

結論から言うと、Json.NET でできる。

Json.NET - Home

元々はここを見て知った。

How do i make formatted json in C#.NET - Stack Overflow

JSONシリアライズ、デシリアライズのライブラリはたくさんあるが、 見やすく整形できるものは全然なかった。

Json.NET は有名なので、存在自体は知っていたが整形できるとは知らなかった。

以下、Json.NET の導入から JSON 文字列の整形まで。

Visual Studio 2013 Express for Windows Desktop を使用。

ツール -> NuGet バッケージマネージャー -> ソリューションの NuGet パッケージの管理

で、json.net を検索してインストールする。

f:id:posnum:20141023220155j:plain

using Newtonsoft.Json; して使う。

private static string format_json(string json)
{
    dynamic parsedJson = JsonConvert.DeserializeObject(json);
    return JsonConvert.SerializeObject(parsedJson, Formatting.Indented);
}

jsonJSON の文字列。 JsonConvert.DeserializeObject でデシリアライズして、 再びシリアライズするときに、JsonConvert.SerializeObject の第二引数で Formatting.Indented を指定しているのがポイント。

サンプルコード

using System;
using Newtonsoft.Json;

namespace JsonFormatter
{
    class Program
    {
        static void Main(string[] args)
        {
            string json = @"{""foo"":111,""bar"":222}";

            Console.WriteLine("整形前:");
            Console.WriteLine(json);

            Console.WriteLine();

            Console.WriteLine("整形後:");
            Console.WriteLine(format_json(json));

            Console.ReadKey();
        }

        private static string format_json(string json)
        {
            dynamic parsedJson = JsonConvert.DeserializeObject(json);
            return JsonConvert.SerializeObject(parsedJson, Formatting.Indented);
        }
    }
}

実行結果

f:id:posnum:20141224102903p:plain