使用 json.net 将 JSON 返回到 JScript 的最佳方法

发布于 2024-11-19 08:04:54 字数 1247 浏览 3 评论 0原文

我使用 WCF 和 webHttpBinding 返回 JSON,以便可以将 JQuery 用于某些网格。今天,我正在查询数据库,并获取 DataTable 返回,并使用 Linq,用我需要的字段填充 List,然后序列化它使用 SerializeObject 因此我可以将其作为字符串返回给客户端。下面是实现的片段:

public string GetJSON(int pSkip, int pTake, int pCount)
{
  DataTable dtResult = WUOnSiteMotivoRejeicaoBus.ObterRejeicoes(pSkip, pTake, pCount);
  List<WUOsMotivoRejeicaoDTO> lsResult = dtResult.AsEnumerable()
    .Select(row => new ClsResultDTO
      {
        Result1 = Convert.ToInt32(row["cd_result1"]),
        Result2 = Convert.ToString(row["dc_result2"]),
      })
    .ToList();
  return JsonConvert.SerializeObject(lsResult, Formatting.None);
}

在接口方面,下面是配置:

[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped,
      ResponseFormat = WebMessageFormat.Json,
      UriTemplate = "GetJson?skip={pSkip}&take={pTake}&count={pCount}")]
string GetJSON(int pSkip, int pTake, int pCount);

返回的是一个需要解析的 JSON 字符串,使用 parseJSON

   var obj = $.parseJSON(retorno);

这是返回 JScript 客户端使用的 JSON 结果的最佳/正确方法吗-边?有没有办法返回字符串以外的东西,并避免解析?

编辑

在客户端,我使用的是 MVC3,而不是 ASP.NET Web 窗体。塔克斯

I'm returning a JSON using WCF and webHttpBinding so that it can be used JQuery for some grids. Today, I'm querying the database, and getting a DataTable back and, using Linq, I fill a List<DTO> with one the fields I need, and I serialize it using SerializeObject so I can return it to the client as a string. Below is the snippet for the implementation:

public string GetJSON(int pSkip, int pTake, int pCount)
{
  DataTable dtResult = WUOnSiteMotivoRejeicaoBus.ObterRejeicoes(pSkip, pTake, pCount);
  List<WUOsMotivoRejeicaoDTO> lsResult = dtResult.AsEnumerable()
    .Select(row => new ClsResultDTO
      {
        Result1 = Convert.ToInt32(row["cd_result1"]),
        Result2 = Convert.ToString(row["dc_result2"]),
      })
    .ToList();
  return JsonConvert.SerializeObject(lsResult, Formatting.None);
}

On the interface side, below is the configuration:

[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Wrapped,
      ResponseFormat = WebMessageFormat.Json,
      UriTemplate = "GetJson?skip={pSkip}&take={pTake}&count={pCount}")]
string GetJSON(int pSkip, int pTake, int pCount);

The return is a JSON string that needs to be parsed, using parseJSON

   var obj = $.parseJSON(retorno);

Is this the best/correct way to return a JSON result to be used by JScript client-side? Is there a way to return something other than a string, and avoid the parsing?

EDIT

On the client side, I'm using MVC3, not ASP.NET Web Forms. Tks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

过气美图社 2024-11-26 08:04:54

不,你犯了一个常见的错误。拿着这篇文章看看

http://encosia.com/asp -net-web-services-mistake-manual-json-serialization/

并且永远不要这样做:)

编辑

需要多放一些。要点是:您永远不应该在 Web 方法内序列化数据,因为 WCF 基础设施会为您完成此操作。如果您自己进行序列化,WCF 中有类似“停止将我的数据序列化为 JSON”之类的配置,因此您返回的字符串将被序列化两次。

因此,您将在客户端执行双重 eval(或 parseJSON)。

由于您只返回一个对象,其余工作将由 WCF 完成。在客户端,如果您使用 jQuery,它会自行评估返回值,并将准备好使用的 javascript 对象传递到“成功”回调中(无需进一步解析)。

No, you are doing one common mistake. Take this post to look

http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/

and never do that :)

EDIT

Need to put some more. The point is: you should never serialize data inside web method, because WCF infrastructre will do it for you. If you do serialization by you own, there are configuration in WCF like "stop serialize my data into JSON", so your retured string would be serialized twice.

Because of that, you will do double eval (or parseJSON) on client.

As you just return an object, the rest of job would be done by WCF. On client side, if you use jQuery it would evaluate returned value by itself and will pass ready to use javascript object into 'succeess' callback (no furhter parsing needed).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文