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



我使用WCF和webHttpBinding返回JSON,以便它可以使用JQuery的一些网格。今天,我正在查询数据库,并得到一个DataTable回来,使用Linq,我用一个我需要的字段填充一个List<DTO>,我用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);

这是最好的/正确的方式来返回JSON结果由JScript客户端使用?是否有一种方法可以返回字符串以外的东西,并避免解析?

编辑

在客户端,我使用mvc,而不是ASP。NET Web窗体。谢谢

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

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

,永远不要这样做:)

编辑

需要再放一些。关键是:你永远不应该在web方法中序列化数据,因为WCF基础设施会为你做这件事。如果你自己做序列化,在WCF中有像"停止序列化我的数据到JSON"这样的配置,所以你返回的字符串将被序列化两次。

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

由于您只是返回一个对象,其余的工作将由WCF完成。在客户端,如果你使用jQuery,它会自己评估返回值,并将准备使用javascript对象传递到' success '回调(不需要进一步解析)。

相关内容

  • 没有找到相关文章

最新更新