VB.NETのクライアントアプリケーションでWEBサービスにアクセスしてJSON形式のデータをデコードしたときのメモ(ASP.NET上ではない)。
開発環境は.NET Framework2.0 Visual Studio 2005
方法としては次の2通り
どっちを使うか迷いましたが、「ASP.NET 2.0 Ajax Extensions」は.NET Framework3.5から標準搭載されるようなので、こちらを使うことに決定。
両者の速度の違いなどがここのブログに書いてあるので一読しとくといいかも。
ASP.NET 2.0 Ajax Extensionsはここから「Download ASP.NET Extensions v1.0」をクリックしてダウンロード。
その後、インストーラからインストール。
Visual Studio 2005では「プロジェクト」→「参照の追加」→「System.Web.Extensions」を選択して、次のをimportsしとく
Imports System.Net
Imports System.Text
Imports System.Web.Script.Serialization
サンプルコードは次のような感じ。
Dim sTargetUrl As String = "http://hoge.com/webservice/"
Dim objWeb As WebClient = New WebClient()
Dim objSrializer As JavaScriptSerializer = New JavaScriptSerializer()
Dim objEncode As Encoding = Encoding.UTF8
Dim bResult As Byte() = objWeb.DownloadData(sTargetUrl)
Dim sJson As String = objEncode.GetString(bResult)
Dim objHash As Hashtable = objSrializer.Deserialize(Of Hashtable)(sJson)
JavaScriptSerializerについてはMSDNを参考に。
HTTPのGETメソッドを発行するサンプルコードはここを参考に。
<2009/03/04 追記>
クライアントアプリケーションからjson形式のデータをポストするときの注意点。
.NET側でobject形式をSerializeメソッドを使ってjson形式に変換するときにHashTableが入れ子になっているとうまくシリアライズされないみたい。
Dictionary(Of String, Object)
だと大丈夫だったのでジェネリックなクラスを使う癖をつけた方がよさげ。
詳しくはMSDNを参照