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