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 を使うことにする。