DynamicJSONを利用したJSONの作成・書き出し
Dynamic JSONを利用してJSONを書き出すコードを紹介します。
概要
「
JSON形式でクラスをシリアライズ・デシリアライズする」の記事ではDataContractJsonSerializerを用いてクラスの情報をJSONにシリアライズするコードを紹介しました。また、「
オブジェクトの配列形式のJSONを書き出す」の記事では、同様の処理でオブジェクトの配列形式のJSONを書き出すコードを紹介しました。
この方法はJSONで書き出す、読み込むクラスの型を事前に適宜しておくため、クラスのオブジェクトの情報や、いつも決まった個数で決まった要素をもつJSONを書き出すには問題な利用できますが、動的に要素が変化したり、要素が商況に応じて、あったりなかったり、または増減する場合は扱いにくいです。
この記事では、Dynamic JSONを利用することで動的に変化するJSONを簡単に書き出すコードを紹介します。
処理の概要
Dynamic JSONでJSONファイルを書き出すには、JSONで書き出すオブジェクトを匿名型で作成します。匿名型の詳細は
こちらの記事を参照してください。JSONの書き出しはDynamicJson.Serialize()メソッドを用います。
サンプルプログラム
DynamicJsonの参照
DynamicJsonのアセンブリを参照します。
Windowsフォームアプリケーションのプロジェクトを新規作成します。
ソリューションエクスプローラのプロジェクトノード内の[参照設定]ノードを選択します。右クリックしてポップアップメニューを表示します。ポップアップメニューの[参照の追加]メニューを選択します。
[参照マネージャー]ダイアログが表示されます。一覧に"DynamicJson.dll"が表示されていれば、左端のチェックボックスにチェックをします。チェックがない場合はダイアログ下部の[参照]ボタンをクリックします。
[参照するファイルの選択]ダイアログボックスが表示されます。DynamicJsonのアセンブリDLL(DynamicJson.dll)を選択します。選択ができたら[追加]ボタンをクリックします。
アセンブリが追加されます。一覧にアセンブリDLLが表示され左端のチェックボックスにチェックがつきます。ダイアログ下部の[OK]ボタンをクリックし、ダイアログボックスを閉じます。
ソリューションエクスプローラの[参照設定]ノードに"DynamicJson"が追加されたことが確認できます。
UI
下図のUIを作成します。Buttonを2つ、MultiLIneプロパティをTrueに設定したTextBoxを1つ配置します。(Buttonは2つ配置しますが、このサンプルではButton1のみしか利用しません。)
コード
以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Codeplex.Data;
namespace DynamicJsonDemo
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var obj = new
{
Item = new
{
Name = "Penguin",
Price = 250,
Alias = new[] { "Pen", "ペンギン", "penguin" },
AddInfo = new
{
Region = "Japan",
Lang = "ja"
}
}
};
textBox1.Text += DynamicJson.Serialize(obj);
}
}
}
解説
var obj = new
{
Item = new
{
Name = "Penguin",
Price = 250,
Alias = new[] { "Pen", "ペンギン", "penguin" },
AddInfo = new
{
Region = "Japan",
Lang = "ja"
}
}
};
上記がJsonを出力する匿名型オブジェクトです。オブジェクトに定義したメンバ変数はすべてJson形式で出力されます。
textBox1.Text += DynamicJson.Serialize(obj);
上記コードにより匿名オブジェクトをシリアライズし、Json適式のテキストに変換します。変換結果はSerialize()メソッドの戻り値として返ります。今回のコードでは結果のJsonをテキストボックスに表示します。
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]をクリックします。作成されたJsonがテキストボックスに表示されます。
DynamicJsonを用いてJsonの書き出しができました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用