HUSKING - kotteri

技術系Note

【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歳