お知らせ
2020年1月20日
C#でJSONを扱う
ASP.NETを使用してシステムを構築する場合に、JSONをよく使うと思います。
新しい技術でも何でもありませんが、メモ的な意味でご紹介します。
.NET Frameworkは神様(冗談)なので、便利なモノを色々用意してくれています。
これはJSONの文字列をオブジェクト⇔オブジェクトをJSON文字列へ相互変換が行え、
入り組んだ配列(配列の中に配列など)も特に不便なく変換してくれます。
[使い方]
まず変換用のクラスを1つ用意します。
※プロジェクト名、クラス名は適当です。ここではプロジェクト名「ConsoleApp1」とします。
JsonTest.cs
using System.IO; using System.Runtime.Serialization.Json; using System.Text; namespace ConsoleApp1 { public static class JsonTest { /// <summary> /// Object → JSON /// </summary> public static string Serialize(this object @object) { using (MemoryStream stream = new MemoryStream()) { new DataContractJsonSerializer(@object.GetType()).WriteObject(stream, @object); return Encoding.UTF8.GetString(stream.ToArray()); } } /// <summary> /// JSON → Object /// </summary> public static T Deserialize<T>(this string message) { using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(message))) { return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(stream); } } } }
Program.cs
using System; using System.Collections.Generic; using System.Runtime.Serialization; namespace ConsoleApp1 { class Program { static void Main(string[] args) { // ①JSONメッセージ string jsonMessage = @"{ ""product_id"": ""A0001"", ""product_name"": ""クレヨン"", ""color_list"": [ ""赤"", ""緑"", ""青"" ] }"; // ②JSONメッセージをオブジェクトへ変換(デシリアライズ) ProductInfo productInfo = jsonMessage.Deserialize<ProductInfo>(); Console.WriteLine("JSON → オブジェクト"); Console.WriteLine($"商品コード:{productInfo.product_id}"); Console.WriteLine($"商品名:{productInfo.product_name}"); Console.WriteLine($"色:{string.Join(",",productInfo.color_list)}"); // ③JSONメッセージをオブジェクトへ変換(デシリアライズ) string s_productInfo = productInfo.Serialize(); Console.WriteLine("オブジェクト → JSON"); Console.WriteLine(s_productInfo); Console.ReadKey(); } /// <summary> /// 商品情報オブジェクト /// </summary> [Serializable, DataContract] class ProductInfo { [DataMember] public string product_id { get; set; } [DataMember] public string product_name { get; set; } [DataMember] public List<string> color_list { get; set; } } } }
実行結果
商品コード:A0001
商品名:クレヨン
色:赤,緑,青
実行プログラム内でJSON文字列をオブジェクトに変えて、オブジェクトの中身をコンソール出力しているだけなので何とも楽しくない実行結果ですが、少ないコードで楽にJSONが扱えるという所が大きなポイントです。
作成時のポイントは、オブジェクトのメンバーに「[DataMember]」属性を付与する事です。よく忘れてnullになったりするので注意。
また、オブジェクトクラス自体にも「[Serializable, DataContract]」属性を忘れずに。
「①JSONメッセージ」で文字列の頭に「@」を付けていますが、これ(逐語的識別子)については後日誰かがブログを書いてくれます。