DynamicJSONを利用したJSONの作成・書き出し - C#

Dynamic JSONを利用してJSONを書き出すコードを紹介します。

概要

JSON形式でクラスをシリアライズ・デシリアライズする (C#プログラミング)」の記事ではDataContractJsonSerializerを用いてクラスの情報をJSONにシリアライズするコードを紹介しました。また、「オブジェクトの配列形式のJSONを書き出す (C#プログラミング)」の記事では、同様の処理でオブジェクトの配列形式の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を愛用
最終更新日: 2020-01-03
作成日: 2014-03-31
iPentec all rights reserverd.