讓ASMX支持Json格式的返回數據

默認情況下,ASMX的Web服務返回soap格式的數據

ajax調用一般使用Json格式的數據。要支持Json格式的數據返回值,可以取消Web服務類前面的 ScriptService註釋。這樣,該Web服務就可以支持ajax調用,參數和返回類型都是Json格式了。

但是,如果你在瀏覽器中測試該Web服務,會發現返回的仍然是xml格式的。這是因爲Web服務會自動根據請求的數據類型返回不同的數據格式。使用瀏覽器發出請求時,沒有指定數據格式,仍然會使用xml格式。如果需要json格式的結果,可以使用jquery中的ajax調用。

例1:使用ajax調用

Web服務代碼:

    [System.Web.Script.Services.ScriptService]
    public class WebServiceHello : System.Web.Services.WebService
    {
        [WebMethod]

        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string[] UserDetails()
        {
            return new string[] { "abc", "def" };
        }
    }

網頁的javascript腳本:

        function hello() {
            $.ajax({
                url: "WebServiceHello.asmx/UserDetails",
                contentType: "application/json; charset=utf-8",
                type: "POST",
                dataType: "json",
                data: "{}",
                success: function(json) {
                    alert(json.d);
                },
                error: function(x, e) {
                    alert(x.responseText); ;
                },
                complete: function(x) {
                    alert(x.responseText);
                }
            });
        }
        hello();

如果是在其它應用程序中調用這個Web服務器,那麼要在請求中添加一個Header:

Content-Type: application/json

例:使用curl命令以json格式調用

curl -d "" "http://localhost:30568/WebServiceHello.asmx/UserDetails" -H "Content-Type: application/json"

返回的內容如下:

{"d":["abc","def"]}

注意:結果會封裝在名爲d的數據成員中。目前我沒有辦法去掉這個封裝。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章