C# で柔軟に JSON にシリアライズする方法(Json.NET)

Json.NET を使用。

NuGet でインストールして、using Newtonsoft.Json; しておく。

単純な方法

匿名型の object をシリアライズする。よく見かける方法。

var obj = new {
    foo = "bar",
    child = new {
        hoge = "fuga"
    }
};

string json = JsonConvert.SerializeObject(obj);

/*
{
  "foo": "bar",
  "child": {
    "hoge": "fuga"
  }
}
*/

欠点としては、

  • キーの値が変数で指定できない(上記の例だと foo や child )
  • 変数宣言時にすべての要素を指定しなければならない(後で要素を Add とかできない)

Dictionary を使う方法

Dictionary を使って柔軟に要素を追加できるようにする。

var dic = new Dictionary<string, object>()
{
    { "foo", "bar" },
};

dic.Add("child", new Dictionary<string, string>() { { "hoge", "fuga" } });
string json = JsonConvert.SerializeObject(dic);

/*
{
  "foo": "bar",
  "child": {
    "hoge": "fuga"
  }
}
*/

キーはだいたい string だと思うので、Dictionary<string, object> を使うと かなり柔軟になって便利。 複雑な JSON を扱う場合は Dictionary を使うことにする。