这是一个相当简单的问题,但谷歌答案有点挑战。
我有一个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方法的附加属性?
答案 0 :(得分:1)
这里的问题是“[System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]”行。这告诉框架将返回对象序列化为JSON,实质上是双重编码,因为您的对象已经是JSON编码的字符串。最简单的方法是为您的演示删除该行。要真正做正确的事情,将其保留在那里并使属性类成为一个实际的复杂对象,并让框架将它序列化为JSON。
类似的问答,以帮助理解:ASP.NET JSON Web Service Response format