Google MapsでJavaScriptのお勉強(PostGISと.NETもあるよ) その5

昨日の内容にちょっと補足です。
マーカーの位置情報の取得について、WebService(asmx)を利用して取得していますが。


デフォルトの設定だと、リモートからの要求に対しては処理が失敗しますね(´・ω・`)
なぜかというと、ASP.NETのデフォルト設定でローカル以外からのPOSTによるWebServiceの呼び出しが禁止されているからです。


これを許可するにはWeb.configに以下のセクションを追加します。

...
  <system.web>
    <webServices>
      <protocols>
        <add name="HttpPost"/>
      </protocols>
    </webServices>
...

で、今日はJSON形式を使用する場合の処理方法についても検証もしておきます(・∀・)


まず、サーバ側の処理を作ってみます。
今回はJson.NETを使用してみようと思うので、プロジェクトでNewtonsoft.Json.dllを参照設定しておきます。


で、こんなコードを書いてみます。

using Newtonsoft.Json;
...

SpotInfo[] array = new SpotInfo[ 2 ];
array[ 0 ] = new SpotInfo( 1, "甲府駅", 138.5690139, 35.6670556 );
array[ 1 ] = new SpotInfo( 6, "朗月堂", 138.551497222222, 35.6533722222222 );

JsonSerializer serializer = new JsonSerializer();
StringWriter sw = new StringWriter();
using( JsonWriter jw = new JsonWriter( sw ) )
{
    serializer.Serialize( jw, array );
}

string output = sw.ToString();

こうすると、出力として以下のような文字列が取得出来ます。

[{"Id":1,"Name":"甲府駅","Lon":138.5690139,"Lat":35.6670556},{"Id":6,"Name":"朗月堂","Lon":138.551497222222,"Lat":35.6533722222222}]

サーバ側の処理としては、ジェネリックハンドラでこれをResponse.Write()してやるものを用意します。


で、クライアント側。
Ajaxの応答コールバックでは、取得した応答の文字列に対して、以下の様に記述するだけでspotsにオブジェクトの配列が取得できます。

var spots = eval( "(" + json + ")" );

XMLを使うよりもずっと簡単ですね(´Д`;)


まあ、WebServiceに関してはこれからマーカー情報の追加、削除とかも実装する予定なので、とりあえず今のままにしておきますが(´ω`)