无法获得.Net Web服务返回Json

时间:2012-04-20 13:21:20

标签: jquery .net json web-services

我已经阅读了这里的帖子并据我所知,但仍然无法让我的网络服务返回json。

网络服务,.Net 4.0

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment     the following line. 
[System.Web.Script.Services.ScriptService]
public class JsonWS : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public string Sum()
{
    string x = "1", y = "2";
    return x + y;
}

}

这是我的jquery电话。

<script>
$(function () {
    $('#btn_test').click(function () {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "http://localhost/jsontest/JsonWS.asmx/Sum",
            dataType: "json",
            success: function (json) {
                alert(json.d);
            },
            error: function () {
                alert("Hit error fn!");
            }
        });
    });
});

这个错误b / c Web服务正在返回...

<string xmlns="http://tempuri.org/">12</string>

感谢。

2 个答案:

答案 0 :(得分:0)

描述

你得到字符串,因为你返回一个字符串。你应该返回一个对象。 该对象将转换为JSon。

示例

public class MyClassName 
{
   public string x { get; set }
   public string y { get; set }
}

[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public MyClassName Sum()
{
    return new MyClassName { x = "1", y = "2" };
}

更新

您也可以返回匿名类型。在这种情况下,您不需要对象MyClassName

[WebMethod]
[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)]
public MyClassName Sum()
{
    return new { x = "1", y = "2" };
}

更多信息

答案 1 :(得分:0)

更新:

无法使用跨域(jsonp)来处理Web服务,因此切换到.aspx页面并将逻辑放在Page_Load中,并带有Response.Write()。奇迹般有效。

对于刚开始做这类事情的人来说,请注意“回调=?” PARAM。另一个警告,Flushing和Closing your Response对于除Chrome之外的所有浏览器都是可以的,因为这会向浏览器发送响应,表明服务器已关闭该流。 Chrome处理方式不同。放手吧,你会没事的。