テスターですが何か?

ホビープログラマ略してHPです

ASP.NET MVC3/WCFでデータをJSON形式で公開する

leave a comment »

東京電力節電効果計測サイト(LightElectricity)のデータを公開しようと考えています。今どきXML形式はないなぁと思い、JSON形式で公開しようと思います。ASP.NET MVC(WCFも含む)では、比較的簡単にデータをJSON形式で公開する方法は2つあります。

  • WCFサービスメソッドのResponseFormatをWebMessageFormat.Jsonに設定する
  • MVC3のJsonValueProviderFactoryを使用する

では、それぞれの方法の解説を行います。

WCFサービスメソッドのResponseFormatをWebMessageFormat.Jsonに設定する

WCFサービスをREST形式で作成します。手順はこちらのエントリーを参考にしてください。

「OutputJSONData」という名前で作成しました。

image

参照設定から「System.ServiceModel.Web」を追加します。そして、サービスインターフェース「IOutputJSONData.cs」の編集を行います。

  • using System.ServiceModel.Webを追加
  • メソッドの戻り値の型をJSON形式で出力したいデータの型に変更(今回はHogeClass)
  • メソッドの属性にUriTemplateとResponseFormat=WebMessageFormat.Jsonを追加(UriTemplateはメソッドを呼び出すURLの指定、ResponseFormatを指定することで出力形式がJSON形式になります)

ソースはこのようになりました。

    [ServiceContract]

    public interface IOutputJSONData

    {

        [OperationContract]

        [WebGet(UriTemplate = "Output", ResponseFormat=WebMessageFormat.Json)]

        HogeClass Output();

    }

そしてサービスを実装するクラス(OutputJSONData.svc.cs)はJSON形式で出力したいデータを作成して、戻り値に設定するだけです。

    public class OutputJSONData : IOutputJSONData

    {

        public HogeClass Output()

        {

            return new HogeClass() { Id = 1, name = "name1" };

        }

    }

 

    public class HogeClass

    {

        public int Id { get; set; }

        public string name { get; set; }

    }

これで、ソースは完成です。デバッグ実行して、URL(http://localhost:49254/OutputJSONData.svc/Output)を指定すると、以下のようにデータを開くか保存するか聞かれます。

image

保存でも、直接開いてもどちらでもいいのですが、データをメモ帳で開くとJSON形式データになっていることが確認できます。

image

エントリーの作成にあたって、以下のサイトの情報を参考にさせていただきました。

WCF サービスを JSON に対応させる

http://blogs.wankuma.com/nakamura/archive/2008/09/09/156001.aspx

 

MVC3のJsonValueProviderFactoryを使用する

次は、ASP.NET MVC3の機能を使用した方法です。Controller.Jsonメソッドを呼び出して、データをJSON形式にシリアル化する方法です。びっくりするくらい簡単です。ソースを見たほうが早いので、ソースを見てください。

    public class HomeController : Controller

    {

        public ActionResult OutputJSON()

        {

            return Json(new HogeClass()

            {

                Id = 1,

                name = "name1"

            }, JsonRequestBehavior.AllowGet);

        }

    }

 

    public class HogeClass

    {

        public int Id { get; set; }

        public string name { get; set; }

    }

JSON形式に出力したいデータを、Jsonメソッドの第一引数に指定して戻り値に設定するだけです。JsonRequestBehavior.AllowGetを指定しないと、Getリクエストを処理できないようです。

View側からこのアクションメソッドを呼び出すと、WCFの時と同じように保存するか開くか聞くダイアログが表示されます。同じく、データを開くことでJSON形式でデータが出力されていることが確認できます。

 

エントリーの作成にあたって、以下のサイトの情報を参考にさせていただきました。

ASP.NET MVC3 RC2のJsonValueProviderFactoryを利用して非同期処理を試す!

http://d.hatena.ne.jp/waritohutsu/20110103/1294059646

 

今回作成したサンプルソースはSkyDriveにアップしてあります。興味のある方は「OutputJSONData.zip」をダウンロードしてみてください。

image

Written by david9142

2011年8月6日 @ 11:10 PM

カテゴリー: ASP.NET

Tagged with ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。