我有一个带有WebMethod的asp.net页面,可以将JSON传递给我的javascript.
贝娄是网络方法:
[WebMethod]
public static string getData(Dictionary<string, string> d) {
string response = "{ \"firstname\": \"John\", \"lastname\": \"Smith\" }";
return response;
}
Run Code Online (Sandbox Code Playgroud)
当它返回给客户端时,其格式如下:
{ \"d\": \"{ \"firstname\": \"John\", \"lastname\": \"Smith\" }\" }
Run Code Online (Sandbox Code Playgroud)
问题是在"d"下包装所有内容的双引号.有没有我在网络方法中遗漏的东西或其他一些没有引号的数据返回方法?我真的不想每次都在客户端剥离它.我也见过其他文章没有发生这种情况.
任何帮助将不胜感激.
我假设您要返回对象的JSON表示
{
firstname:"John",
lastname:"Smith"
}
Run Code Online (Sandbox Code Playgroud)
但是您的方法签名返回一个字符串.ASP.Net框架序列化正确地序列化字符串response.换句话说,如果你的功能是
string response = "foo";
return response;
Run Code Online (Sandbox Code Playgroud)
如果输出是你,你不会感到惊讶
{"d":{"foo"}}
Run Code Online (Sandbox Code Playgroud)
恰好response有双引号需要转义.
你显然只想得到这个对象.你有2个选择: -
1)eval在你的javascript中使用将字符串转换为对象,例如
function onSuccessCallback(retval) {
var obj = eval(retval.d);
}`
Run Code Online (Sandbox Code Playgroud)
2)或(这是我的首选解决方案)让你的方法返回一个实际的对象,并让框架的JSON序列化为你做繁重的工作
[WebMethod]
public static object getData(Dictionary<string, string> d) {
var response = new { firstname = "John", lastname="Smith" };
return response;
}
Run Code Online (Sandbox Code Playgroud)
您将看到这会生成您可能最初预期的响应(例如,
{"d":{"firstname":"John", "lastname":"Smith"}}