一尘不染

ASP.NET WebMethod返回用引号引起来的JSON

json

我有一个带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方法或其他不带引号的返回数据的方法中,我缺少什么吗?我真的不想每次都在客户端上删除它。我也看过其他的文章,这些文章是不会发生的。

任何帮助,将不胜感激谢谢。


阅读 190

收藏
2020-07-27

共1个答案

一尘不染

我假设您想返回对象的JSON表示形式

 {
    firstname:"John",
    lastname:"Smith"
 }

但您的方法签名返回一个字符串。ASP.Net框架的序列化 正确地 对字符串进行了序列化response。换句话说,如果您的功能是

string response = "foo";
return response;

如果输出是

{"d":{"foo"}}

碰巧response有双引号需要转义。

您显然只想达到目标。您有2种选择:-

1)eval在您的JavaScript中使用,将字符串变成一个对象,例如

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"}}

2020-07-27