我不熟悉这种格式:
{"d":"{\"Table\":[{\"pCol\":12345,\"fCol\":\"jeff\",\"lCol\":\"Smith\",\"dId\":1111111,\"tDate\":\"\\/Date(1153033200000-0700)\\/\"}]}"}
我正在使用Newtonsoft序列化我从ASP.Net webservice返回的DataSet。上面的JSON字符串是Firebug返回的内容。我已经使用jsLint检查了这个JSON,这很好。
在firebug中,我看到了JSON数据和我的第一个alert('success');
但是当我尝试alert(msg.d.Table);
时,我什么都没得到。 Firebug中没有警告框或错误...我认为它与这些反斜杠有关......但我不确定。
有什么想法吗?
答案 0 :(得分:6)
那些反斜杠是转义字符。它们正在转义与d
关联的字符串中的双引号。您无法alert
msg.d.Table
的原因是因为d
的值是一个字符串。您必须使用JSON.parse
将该JSON字符串解析为JSON对象。
然后,您必须将Table
转换回字符串以提醒它。
像这样:
var dObj = JSON.parse(msg.d);
alert(JSON.stringify(dObj.Table, null, 2));
答案 1 :(得分:3)
ASP.Net webservice已经将返回值序列化为JSON。 (出于安全原因,在d
属性中)
当您返回预序列化的JSON数据时,它认为您正在为它提供一个普通的字符串,并继续将该字符串序列化为JSON。
因此,您将获得一个具有d
属性的JSON对象,该属性包含您返回的原始JSON字符串(具有正确的转义引号)。
您应该返回原始对象并让ASP.Net为您序列化它,而不是自己序列化。