【发布时间】:2011-11-04 23:31:42
【问题描述】:
我正在使用 JQuery 和 WebMethod 在我的数据库中发送和存储 JSON 对象的字符串表示形式。
以同样的方式,我还有另一个 WebMethod,它应该从数据库中取回用户设置并将其返回给请求客户端:
[WebMethod]
public static string GetUserSettings()
{
FacebookWebContext currentFbContext = FacebookWebContext.Current;
string encodedSettings = "{}";
if (currentFbContext.IsAuthorized(ExtendedPermissions))
{
// Methods to fetch json back from the database into "encodedSettings"
}
return encodedSettings;
}
一切顺利,但问题是当我“嗅探”http响应时,响应是这样包装的:
{"d":"my_stored_json_object_as_an_escaped_string"} 这很好,但由于返回类型设置为“字符串”,整个存储的 json 将在“和其他转义字符之前用 '\' 字符跳过,因此我不能使用它作为客户端的 javascript 对象。
我尝试使用这样的东西:
$.ajax({
type: "POST",
url: "Ajax/Default.aspx/GetUserSettings",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (usrSettingsObj) {
var obj = eval(usrSettingsObj.d);
}});
但它会引发错误。
知道如何解决这个问题吗?
【问题讨论】:
-
为什么要返回字符串而不是匿名对象?
-
由于我使用服务器端只是为了保存 JSON 对象,我不想(或不需要)将它反序列化为 .NET 对象,这将产生不必要的开销。 .
-
我会说你可能不应该首先将你的数据作为 JSON 存储在数据库中,但如果这不是一个选项,那么我同意反序列化它只是为了再次序列化将是一个有点傻。我不知道有什么方法可以让 web 方法按原样返回给定的字符串。
标签: jquery asp.net json webmethod