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

C# ascx WebMethod返回已编码的JSON字符串,c#,asp.net,ajax,json,web-services,C#,Asp.net,Ajax,Json,Web Services,这是一个相当简单的问题,但谷歌搜索答案有点挑战性 我有一个webmethod,由于不相关的原因,它有一个已经被JSON编码的字符串。我想将这个JSON数据包返回给客户端 C# JS 数据包含JSON编码的字符串,obj包含实际的obj 在传输过程中,数据将被双重编码,增加了处理时间和带宽要求 有没有一种方法可以跳过这种冗余开销,而不必在服务器上对数据包进行反序列化并返回一个对象(可能在web方法上有一个附加属性?这里的问题是“[System.web.Script.Services.ScriptM

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

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

C#

JS

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

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

有没有一种方法可以跳过这种冗余开销,而不必在服务器上对数据包进行反序列化并返回一个对象(可能在web方法上有一个附加属性?

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


类似的Q/A有助于理解:

事实上,在最初的问题(如前所述)中,转换复杂对象只能通过反序列化现有的JSON数据包(来自SQL)来实现,但由于其他原因,我现在不得不重新设计此代码,所以实际上我确实有一个对象图。
[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\"}";
}
Namepsace.Service.GetJSONString(function(data)
{
  console.log(data);
  var obj=JSON.parse(data);
});