ascx WebMethod返回已编码的JSON字符串

时间:2014-07-31 15:33:29

标签: c# asp.net ajax json web-services

这是一个相当简单的问题,但谷歌答案有点挑战。

我有一个webmethod,由于不相关的原因,它有一个已经被JSON编码的字符串。我想将此JSON数据包返回给客户端。

C#

[WebMethod(true)]
[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
public string GetJSONString()
{
  return MethodWhichReturnsJSONString();
}
private string MethodWhichReturnsJSONString()
{
  return "{\"Message\":\"Hard coded string for demo purposes\"}";
}

JS

Namepsace.Service.GetJSONString(function(data)
{
  console.log(data);
  var obj=JSON.parse(data);
});

数据包含JSON编码的字符串,obj包含实际的obj;

在传输过程中,数据将经过双重编码,增加了处理时间和带宽要求。

有没有办法跳过这个冗余开销,而无需在服务器上对数据包进行序列化并返回一个对象,可能还有一个Web方法的附加属性?

1 个答案:

答案 0 :(得分:1)

这里的问题是“[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]”行。这告诉框架将返回对象序列化为JSON,实质上是双重编码,因为您的对象已经是JSON编码的字符串。最简单的方法是为您的演示删除该行。要真正做正确的事情,将其保留在那里并使属性类成为一个实际的复杂对象,并让框架将它序列化为JSON。

类似的问答,以帮助理解:ASP.NET JSON Web Service Response format