C#4.0でJSONを作成する
こんにちはYagiです。
webサイト制作の際にJavaScriptを使用して、
クライアントとサーバの通信の際のデータ形式としてJSONを使用することがよくあります。
そのため、サーバサイドでJSONを生成してクライアントに渡してあげる必要があります。
JavaScriptSerializer
C#4.0からJavaScriptSerializerというJSON生成するためのクラスが追加されました。
このクラスを使うことによって、簡単にJSONを生成することが出来ます。
JavaScriptSerializerは、System.Web.Extensions.dllのSystem.Web.Script.Serialization名前空間にあります。
使う場合は参照の追加を忘れずに行ってください。
試しに配列のJSONを返す例を上げます。
using System; using System.Collections.Generic; using System.Web.Script.Serialization; namespace JsonExample{ class Program{ static void Main(string[] args){ JavaScriptSerializer serializer = new JavaScriptSerializer(); IList<int> list = new [] { 1, 2, 3 }; string json = serializer.Serialize(list); Console.WriteLine(json); //出力:[1,2,3] Console.ReadLine(); } } }
「serializer.Serialize(オブジェクト)」で引数に入れたオブジェクトをJSON形式のStringに変換しています。
もちろん配列以外のオブジェクトもJSONに変換可能です。
using System; using System.Collections.Generic; using System.Web.Script.Serialization; namespace JsonTech{ class Program{ static void Main(string[] args){ JavaScriptSerializer serializer = new JavaScriptSerializer(); Counter counter = new Counter(); counter.count = 3; Console.WriteLine(serializer.Serialize(counter)); //出力:{"count":3} Comments comments = new Comments(); comments.count = 3; comments.list = new[] { "hello", "ハロー", "はろー" }; Console.WriteLine(serializer.Serialize(comments)); //出力:{"count":3,"list":["hello","ハロー","はろー"]} Console.ReadLine(); } class Counter{ public int count; } class Comments{ public int count; public IList<string> list; } } }
下でCounterとCommentsクラスを定義しています。
それらをnewしてSerialzie()の引数に入れることによって、そのオブジェクトをJSON形式に変換します。
また、C#3.0で新しく導入された匿名型を使用すれば、もっと短くコードで済みます。
JavaScriptSerializer serializer = new JavaScriptSerializer(); Console.WriteLine(serializer.Serialize(new { count = 3 })); //出力:{"count":3} Console.WriteLine(serializer.Serialize(new { count = 3, list = new[]{"hello","ハロー","はろー" } })); //出力:{"count":3,"list":["hello","ハロー","はろー"]}
非常にお手軽に生成できることがわかります。
C#4.0ではほかにも、RSS生成用のRss20FeedFormatterクラスなど用意されてたり、
いろいろな便利なクラスが用意してあるので、どんどん使っていきたいですね。