ここでは、C#で、.NetFrameworkライブラリの DataContractJsonSerializer クラスを使って、クラスオブジェクトをJSON形式のテキストにシリアライズ(変換)するサンプルコードを掲載しています。
スポンサーリンク
使用するクラスオブジェクト
ここで紹介するサンプルでは次のクラスを使用します。
// 参照の追加の必要あり
//using System.Runtime.Serialization;
[DataContract]
class ProductData
{
public ProductData()
{
header = new HeaderData();
body = new BodyData();
}
/*
* DataMember Name属性でJSON出力時のキー名を設定できる
* 設定しない場合は、宣言した名前と同じになる
*/
[DataMember(Name = "header")]
public HeaderData header { get; set; }
[DataMember(Name = "body")]
public BodyData body { get; set; }
/*
* IgnoreDataMember でシリアライズ対象外となる
*/
[IgnoreDataMember]
public string ignoreText { get; set; }
}
[DataContract]
class HeaderData
{
[DataMember(Name = "name")]
public string name { get; set; }
}
[DataContract]
class BodyData
{
[DataMember(Name = "area")]
public string area { get; set; }
}
シリアライズによって出力されるJSONテキストは、次の通りです。なお、改行は読みやすくなるように入れています。
{
"header":
{
"name":"桃"
},
"body":
{
"area":"山梨"
}
}
クラスオブジェクトをJSONにシリアライズ(デシリアライズ)
上記クラスをJSONにシリアライズするサンプルコードは次の通りです。サンプル内ではJSONからクラスオブジェクトへデシリアライズも行っています。
// クラスオブジェクトに値を設定
var p = new ProductData();
p.header.name = "桃";
p.body.area = "山梨";
using (var ms = new MemoryStream())
using (var sr = new StreamReader(ms))
{
// オブジェクトの内容をJSONにシリアライズ
var serializer = new DataContractJsonSerializer(typeof(ProductData));
serializer.WriteObject(ms, p);
// 読み出し位置を先頭に戻す
ms.Position = 0;
// シリアライズしたJSONを読み込む
string json = sr.ReadToEnd();
// 確認用に出力
WriteLine(json);
// 読み出し位置を先頭に戻す
ms.Position = 0;
// JSONからクラスオブジェクトへデシリアライズ
var de = (ProductData)serializer.ReadObject(ms);
// 確認用に出力
WriteLine("Name = " + de.header.name);
WriteLine("Area : " + de.body.area);
}