【问题标题】:ascx WebMethod to return already encoded JSON stringascx WebMethod 返回已编码的 JSON 字符串
【发布时间】:2014-07-31 15:33:29
【问题描述】:

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

我有一个网络方法,由于不相关的原因,它有一个已经被 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 方法上有一个附加属性?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 实际上,在最初的问题(如前所述)中,只能通过反序列化现有的 JSON 数据包(来自 SQL)来实现转换复杂对象,但我现在不得不重新设计这段代码无论如何,出于其他原因,所以我确实有一个对象图。
    猜你喜欢
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2020-08-14
    相关资源
    最近更新 更多