【C#】DataContractJsonSerializerでJSONを扱う
使用するための準備
1. シリアライズ(Object > JSON)用メソッドを作成
using System.IO; // ←追加 using System.Runtime.Serialization.Json; // ←追加 namespace JsonTestApp { public static class JsonUtils { /// <summary> /// オブジェクトからJSONへ変換します /// </summary> /// <param name="obj">JSONへ変換するオブジェクト</param> /// <returns>JSON</returns> public static string ToJson(object obj) { using (MemoryStream ms = new MemoryStream()) { var serializer = new DataContractJsonSerializer(obj.GetType()); serializer.WriteObject(ms, obj); return Encoding.UTF8.GetString(ms.ToArray()); } } } }
2. デシリアライズ(JSON > Object)用メソッドを作成
using System.IO; // ←追加 using System.Runtime.Serialization.Json; // ←追加 namespace JsonTestApp { public static class JsonUtils { /// <summary> /// JSONからオブジェクトへ変換します /// </summary> /// <typeparam name="T"></typeparam> /// <param name="json">オブジェクトへ変換するJSON</param> /// <returns>オブジェクト</returns> public static T ToObject<T>(string json) { using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json))) { var serializer = new DataContractJsonSerializer(typeof(T)); return (T)serializer.ReadObject(ms); } } } }
実際の使用例
1. JSONへ変換するためのオブジェクトを作成
using System.Runtime.Serialization; // ←追加 namespace JsonTestApp { [DataContract] // ←重要 class SampleData { [DataMember] // ←重要 public string name { get; set; } [DataMember] // ←重要 public string age { get; set; } } }
2. Object から JSONへ
static void Main(string[] args) { SampleData data = new SampleData(); data.name = "大泉 洋"; data.age = "44歳"; string json = JsonUtils.ToJson(data); Console.WriteLine(json); }
コンソール出力結果
"{\"age\":\"44歳\",\"name\":\"大泉 洋\"}"
3. JSONからObjectへ
static void Main(string[] args) { string json = "{\"age\":\"44歳\",\"name\":\"大泉 洋\"}"; SampleData data = JsonUtils.ToObject<SampleData>(json); Console.WriteLine(data.name); Console.WriteLine(data.age); }
コンソール出力結果
大泉 洋 44歳