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クラスなど用意されてたり、
いろいろな便利なクラスが用意してあるので、どんどん使っていきたいですね。