JSON似乎是由VB Web Service双重编码的

时间:2013-03-18 11:50:55

标签: vb.net json web-services parsing

在VB.NET中工作。这是我的Web服务 - 它是一个aspx代码隐藏页面的方法,尽管它在asmx中的行为相同:

<WebService(Namespace:="http://mycompany/WebServices/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ScriptService()> _
Partial Class AnAspxPageCodeBehind
    Inherits System.Web.UI.Page

    <WebMethod()> _
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
    Public Shared Function GetSettings(param As String) As String
        Dim something As AClass = DoSomethingWith(param)

        Return New JavaScriptSerializer().Serialize(something)
    End Function

我称之为:

var dataToSend = '{"param":' + data + '}';

$.ajax({
    url: 'AnAspxCodeBehind.aspx/GetSettings',
    type: 'POST',
    data: dataToSend,
    contentType: "application/json; charset=utf-8",
    datatype: 'json',
    success: function (data) {
        var ret = JSON.parse(JSON.parse(data).d);
    }
});

注意成功函数中的双JSON.parse调用?当我以前完成Web服务(使用C#)之前,我只需要做var ret = JSON.parse(data.d)。

谁能告诉我这里发生了什么?

由于

大卫

1 个答案:

答案 0 :(得分:0)

WebService框架根据请求自动将结果序列化为XML或JSON。您不应该手动执行JSON序列化,如果这样做,您最终会得到双重编码结果。

只需从函数中返回常规字符串,对象或对象列表即可。该框架将完成剩下的工作。在您的情况下,声明函数As AClass

您也不需要在客户端调用JSON.parse。 jQuery将为您解析它并在data中传递已解析的对象。