我有一个带WebMethod的asp.net页面,可将JSON传递回我的JavaScript。
贝娄是网络方法:
[WebMethod] public static string getData(Dictionary<string, string> d) { string response = "{ \"firstname\": \"John\", \"lastname\": \"Smith\" }"; return response; }
当它返回给客户端时,其格式如下:
{ \"d\": \"{ \"firstname\": \"John\", \"lastname\": \"Smith\" }\" }
问题在于双引号将所有内容都包装在’d’下。在web方法或其他不带引号的返回数据的方法中,我缺少什么吗?我真的不想每次都在客户端上删除它。我也看过其他的文章,这些文章是不会发生的。
任何帮助,将不胜感激谢谢。
我假设您想返回对象的JSON表示形式
{ firstname:"John", lastname:"Smith" }
但您的方法签名返回一个字符串。ASP.Net框架的序列化 正确地 对字符串进行了序列化response。换句话说,如果您的功能是
response
string response = "foo"; return response;
如果输出是
{"d":{"foo"}}
碰巧response有双引号需要转义。
您显然只想达到目标。您有2种选择:-
1)eval在您的JavaScript中使用,将字符串变成一个对象,例如
eval
function onSuccessCallback(retval) { var obj = eval(retval.d); }`
2)或(这是我的首选解决方案)让您的方法返回一个实际对象,并让框架的JSON序列化为您完成繁重的工作
[WebMethod] public static object getData(Dictionary<string, string> d) { var response = new { firstname = "John", lastname="Smith" }; return response; }
您将看到,这会生成您最初可能期望的响应(例如, {"d":{"firstname":"John", "lastname":"Smith"}}
{"d":{"firstname":"John", "lastname":"Smith"}}