JSON (JavaScript Object Notation) と言えば、軽量で人にもコンピュータにも扱いやすいデータ交換フォーマットです。JavaScriptの表記法をベースとしているようですが、様々なソフトやプログラム言語で幅広く使われています。
そんなJSONをC#から扱う方法についてまとめてみます。
JSONを扱う為のライブラリはいくつかあるようですが、ここでは.Net Frameworkで提供されるものを使ってみます。
環境の準備
JSONを扱う為のには、プロジェクトに参照の追加をする必要があります。
以下の手順でアセンブリSystem.Runtime.Serializationへの参照をプロジェクトに追加しましょう。
参照の追加
メニューから[プロジェクト(P)]→[参照の追加(R)...]を選択します。
一覧からSystem.Runtime.Serializationを探してチェックして[OK]ボタンをクリックします。
オブジェクトをJSONに変換 (JSON形式で保存する)
JSONへ変換するにはSystem.Runtime.Serialization.Json.DataContractJsonSerializerクラスを使います。
以下の例では、TestItemというクラスをJSON形式へ変換しています。
public class TestItem
{
public int Code { get; set; }
public String Name { get; set; }
}
public void JSONTest()
{
var item = new TestItem();
item.Code = 0;
item.Name = "TEST";
using (var stream = new MemoryStream())
{
var serializer = new DataContractJsonSerializer(typeof(TestItem));
serializer.WriteObject(stream, item);
}
}
DataContractJsonSerializerクラスのコンストラクタへ変換するクラスのタイプを渡します。
WriteObjectメソッドでJSON形式へ変換された結果がストリームへ書き出されます。
JSONへの変換結果は以下のようになります。
{"Code":0,"Name":"TEST"}
配列をJSONへ変換 (JSON形式で保存する)
配列をJSONへ変換する時もやり方は上記と一緒です。
public void JSONTest()
{
var items = new TestItem[3];
items[0] = new TestItem();
items[0].Code = 0;
items[0].Name = "TEST0";
items[1] = new TestItem();
items[1].Code = 1;
items[1].Name = "TEST1";
items[2] = new TestItem();
items[2].Code = 2;
items[2].Name = "TEST2";
using (var stream = new MemoryStream())
{
var serializer = new DataContractJsonSerializer(typeof(TestItem[]));
serializer.WriteObject(stream, items);
}
}
DataContractJsonSerializerクラスのコンストラクタへ変換する配列のタイプを渡します。
WriteObjectメソッドでJSON形式へ変換された結果がストリームへ書き出されます。
JSONへの変換結果は以下のようになります。
[{"Code":0,"Name":"TEST0"},{"Code":1,"Name":"TEST1"},{"Code":2,"Name":"TEST2"}]
JSONへの出力項目を制御する
JSONのキーを指定する
上記の例ではJSONのキーはプロパティ名になっていますが、場合によってはキーを別の文字列にしたい事があるかもしれません。
そのような場合は変換したいクラスへ[DataContract]属性や[DataMember]属性を指定します。
以下の例ではキーが小文字になるように定義しています。
using System.Runtime.Serialization;
[DataContract]
public class TestItem
{
[DataMember(Name = "code")]
public int Code { get; set; }
[DataMember(Name = "name")]
public String Name { get; set; }
}
まずSystem.Runtime.Serializationをusingします。
クラスに[DataContract]属性を付与します。
各プロパティに[DataMember]属性を付与してキーの名称を定義します。
JSONへの変換結果は以下のようになります。
{"code":0,"name":"TEST"}
JSONに出力しない項目を指定する
プロパティに出力したくないものがある場合は[IgnoreDataMember]属性を付与します。
以下の例ではNameプロパティを出力しないように定義しています。
using System.Runtime.Serialization;
[DataContract]
public class TestItem
{
[DataMember(Name = "code")]
public int Code { get; set; }
[IgnoreDataMember]
public String Name { get; set; }
}
JSONへの変換結果は以下のようになります。
{"code":0}
JSONからオブジェクトを生成 (JSON形式を読み込む)
JSONからオブジェクトを生成する場合もSystem.Runtime.Serialization.Json.DataContractJsonSerializerクラスを使います。
var serializer = new DataContractJsonSerializer(typeof(TestItem)); TestItem item = (TestItem)serializer.ReadObject(stream);
ReadObjectメソッドでストリームからJSONを取り込みオブジェクトへ変換します。



コメント
コメントを投稿