返回已经编码的JSON字符串

本文关键字:JSON 字符串 编码 返回 | 更新日期: 2023-09-27 18:16:01

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

我有一个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);
});

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

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

有没有一种方法可以跳过这个冗余的开销,而不需要在服务器上反序列化数据包并返回一个对象,也许在web方法上有一个额外的属性?

返回已经编码的JSON字符串

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

类似的问答有助于理解:NET JSON Web服务响应格式