Json在序列化对象中使用bashslash解析错误

时间:2012-05-23 18:27:26

标签: c# javascript jquery ajax json

我正在调用服务器端函数来返回一个json格式字符串,并使用javascript和ajax在客户端解析。我在javascript上得到了解析错误。我认为这是反斜杠JavaScriptSerializer添加到序列化对象。这是我从firebug看到的回应: {“d”:“{\”Item \“:\”Testing \“}}},我理解反斜杠是为了逃避双引号,但我如何让json解决这个问题?我花了3天时间在google上进行所有搜索。我似乎和其他人一样。谢谢你的帮助。

服务器端代码:

[System.Web.Services.WebMethod]
public static string testmethod(string serial)
{ 
    ItemList itemlist = new ItemList();
    itemlist.Item = "Testing";     
    return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(itemlist);
}

[System.Runtime.Serialization.DataContract]
public class ItemList
{
    [System.Runtime.Serialization.DataMember]
    public string Item { get; set; }
}

带有ajax的客户端Javascript:

function PassParemeterToAspxUsingJquery(serial)
{               
    var sn = "test";//serial;
    $.ajax({
    type: "POST",
    url: "test.aspx/testmethod",
    contentType: "application/json; charset=utf-8",
    data: "{serial:'" + sn+"'}" ,
    dataType: "json",
    success: function(msg) {           
       alert(msg.d);             
    },
    error: function(jqXHR, textStatus, errorThrown){
       alert("The following error occured: "+ textStatus, errorThrown);
       alert(jqXHR.responseText);
    }
    });
}

1 个答案:

答案 0 :(得分:1)

WebMethod不会值嵌入作为JSON文本的一部分。如果您希望将其序列化为JSON对象而不是JSON字符串,则必须返回Object而不是String

[System.Web.Services.WebMethod]
public static object testmethod(string serial)
{
    ItemList itemlist = new ItemList();
    itemlist.Item = "Testing";
    return itemList;
}

但是,这可能需要.NET 3.5和ScriptMethodAttribute

[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static object testmethod(string serial)
{ ... }

然后只是:

success: function(msg) {
   alert(msg.d.Item);
}

或者,您应该可以通过解析msg.d

来使用它
success: function(msg) {
    var data = $.parseJSON(msg.d);

    alert(data.Item);
}