お知らせ
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メッセージ」で文字列の頭に「@」を付けていますが、これ(逐語的識別子)については後日誰かがブログを書いてくれます。