プログラミングのメモ用BLOGです 自己紹介:あんどれ へっぽこプログラマです

ラベル

2007年6月19日

WebServiceの戻り値に利用しているDataSet,DataTableをJSONに変換する(asp.net ajax利用)

Jason氏のAjaxComponentLibraryを利用します。
1.(a Weblog by Jason Diamond)からJacl Release 3をダウンロードする。
http://jason.diamond.name/weblog/2007/06/07/jacl-release-3
  のrelease からダウンロードできます。(This was posted by Jason Diamond on Thursday, June 7th, 2007 at 2:57 pm.)

ネタ元:@ITの掲示板「件名:ajaxの返す値が2つ以上の場合」(※1)

2.Jacl-3.zipを解凍してビルド。AjaxComponentLibrary.dllを探して(※2)コピー。自分のプロジェクトから参照できるようにする。

3.利用する。
(1)Web.configに以下の内容(※3)を追加


<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization>
<converters>
<add name="DataConverter" type="AjaxComponentLibrary.DataConverter" />
</converters>
</jsonSerialization>
</webServices>
</scripting>
</system.web.extensions>

(2)後は、普通に使えます。

[WebMethod]
public DataTable GetData()
{
DataTable dt = new DataTable();

dt.Columns.Add("id", typeof(string));
dt.Columns.Add("title", typeof(string));

dt.Rows.Add(new object[] { "0001", "Table Convert" });
dt.Rows.Add(new object[] { "0002", "Good Job!" });

return dt;
}


responseデータ(firebugで確認)
{"columns":["id","title"],"rows":[{"id":"0001","title":"Table Convert"},{"id":"0002","title":"Good Job!"}],"__type":"System.Data.DataTable"}

※1 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=24246&forum=7
※2 ?ajaxcomponent3\Jacl\AjaxComponentLibrary\bin\Debug\AjaxComponentLibrary.dll
※3 詳細は、http://ajax.asp.net/docs/ConfiguringASPNETAJAX.aspxのThe <system.web.extensions> Elementを参照


以下は、思いついたことを適当に・・・
・Web.configの<jsonSerialization>で設定した情報をどこで使っているかまではみていない。誰か調べた方がいたら教えてほしいです^^;
・JavaScriptConverterを継承したDataConverterでDataSet,Datatableをジェネリクス型のDistionaryに変換している。
・XMLから直接JSONにするなら参考になるかも。簡単にできなさそうだったので見ただけ。
 HttpWebRequest を使用して ASP.NET AJax のメソッドを呼び出す(1)
 HttpWebRequest を使用して ASP.NET AJax のメソッドを呼び出す(2)
How to convert XML to JSON in ASP.NET C#→これもXMLをJSONにする方法。例がわかりやすそう。

・Jason's AJAX Component LibraryのサンプルWebsiteには他にもすばらしいコンポーネントサンプルがあるが必要になったら見ることにする。

An introduction to extender controls and behaviors
Extender control examples

* ReorderColumnsExtender
* ResizeColumnsExtender
* SelectActionExtender
* SortRowsExtender
* TableDataBinderExtender
* TableRowCheckedChangedExtender
* TextBoxImageButtonExtender
* TextChangedExtender

Non-visual component examples

* TextSizeWatcher

Other examples

* Returning DataSet and DataTable objects from web services
* Using both ReorderColumnsExtender and ResizeColumnsExtender on the same target
* Using both ReorderColumnsExtender and SortRowsExtender on the same target
* Persisting sorted tables with cookies

0 件のコメント: