序列化对象中带有 bashslash 的 Json 分析错误
本文关键字:Json 错误 bashslash 对象 序列化 | 更新日期: 2023-09-27 18:35:03
我正在调用服务器端函数来返回 json 格式字符串并使用 javascript 和 ajax 在客户端解析。我在javascript上遇到了解析错误。我认为这是JavaScriptSerializer添加到序列化对象的反斜杠。这是我从Firebug看到的回应:{"d":"{''"Item''":''"Testing''"}"} ,我知道反斜杠是为了转义双引号,但是我如何让 JSON 解决这个问题?我花了3天时间在谷歌做所有的搜索。看来我和别人一样。感谢您的帮助。
服务器端代码:
[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; }
}
客户端 Javascript with ajax:
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);
}
});
}
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);
}