ここでは、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); }