JSONのシリアライズ
下のようなJSONを生成します。
[ { "lastName":"山田", "firstName":"太郎", "contactInfos":[ { "type":"会社" "address":"東京都○区△町1-2-3", }, { "type":"自宅" "address":"東京都○区△町1-2-3", } ], "purchasedID":[ 101,501,701 ] }, { "lastName":"佐藤", "firstName":"花子", "contactInfos":[ { "type":"自宅" "address":"神奈川県○区△町1-2-3", } ], "purchasedID":[ 101,501,701 ] } ]
JSON の形式にあったクラスを準備します。JSONがネストしているところはList
using System; using System.Collections.Generic; using System.Runtime.Serialization; namespace JSONHandling { /// <summary> /// 顧客クラス /// </summary> [DataContract] public class Customer { /// <summary> /// 苗字 /// </summary> [DataMember(Name = "lastName")] public string LastName { get; set; } /// <summary> /// 名前 /// </summary> [DataMember(Name = "firstName")] public string FirstName { get; set; } /// <summary> /// 連絡先リスト /// </summary> [DataMember(Name = "contactInfos")] public List<ContactInfo> ContactInfos { get; set; } /// <summary> /// 購入商品IDリスト /// </summary> [DataMember(Name = "purchasedID")] public List<int?> PurchasedID { get; set; } } /// <summary> /// 連絡先情報 /// </summary> [DataContract] public class ContactInfo { /// <summary> /// 連絡先タイプ /// </summary> [DataMember(Name = "type")] public string Type { get; set; } /// <summary> /// 住所 /// </summary> [DataMember(Name = "address")] public string Address { get; set; } } }
クラスに値を設定したら、System.Runtime.Serialization.Json.DataContractJsonSerializerを使用してシリアライズします。
using System; using System.Collections.Generic; using System.Text; using System.Runtime.Serialization.Json; using System.IO; namespace JSONHandling { class Program { static void Main(string[] args) { //山田さんの顧客情報作成 var yamada = new Customer() { LastName = "山田", FirstName = "太郎", ContactInfos = new List<ContactInfo>() { new ContactInfo() { Type = "会社", Address = "東京都○区△町1-2-3", }, new ContactInfo() { Type = "自宅", Address = "東京都○区△町1-2-3", }, }, PurchasedID = new List<int?>() { 101,501,701 }, }; //佐藤さんの顧客情報作成 var sato = new Customer() { LastName = "佐藤", FirstName = "花子", ContactInfos = new List<ContactInfo>() { new ContactInfo() { Type = "自宅", Address = "神奈川県○区△町1-2-3", }, }, PurchasedID = new List<int?>() { 101, 501, 701 }, }; //顧客リストを作成 var customers = new List<Customer>(); customers.Add(yamada); customers.Add(sato); //シリアライズしてメモリストリームに書き込む var serializer = new DataContractJsonSerializer(typeof(List<Customer>)); var ms = new MemoryStream(); serializer.WriteObject(ms, customers); Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray())); #if DEBUG Console.ReadLine(); #endif } } }
実行結果
[{"contactInfos":[{"address":"東京都○区△町1-2-3","type":"会社"},{"address":"東 京都○区△町1-2-3","type":"自宅"}],"firstName":"太郎","lastName":"山田","purchas edID":[101,501,701]},{"contactInfos":[{"address":"神奈川県○区△町1-2-3","type": "自宅"}],"firstName":"花子","lastName":"佐藤","purchasedID":[101,501,701]}]
整形するときちんと出力されていることがわかります(※プロパティのアルファベット順にソートされています)
[ { "contactInfos":[ { "address":"東京都○区△町1-2-3", "type":"会社" }, { "address":"東京都○区△町1-2-3", "type":"自宅" } ], "firstName":"太郎", "lastName":"山田", "purchasedID":[ 101,501,701 ] }, { "contactInfos":[ { "address":"神奈川県○区△町1-2-3", "type":"自宅" } ], "firstName":"花子", "lastName":"佐藤", "purchasedID":[ 101,501,701 ] } ]