1

WCF を使用して JSON を返しているwebHttpBindingので、一部のグリッドで 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);

戻り値は、parseJSON を使用して解析する必要がある JSON 文字列です。

   var obj = $.parseJSON(retorno);

これは、JScript クライアント側で使用される JSON 結果を返すための最良/正しい方法ですか? 文字列以外のものを返し、解析を回避する方法はありますか?

編集

クライアント側では、ASP.NET Web フォームではなく MVC3 を使用しています。Tks

4

1 に答える 1

2

いいえ、あなたは 1 つのよくある間違いを犯しています。この投稿を見てください

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

そして決してそれをしないでください:)

編集

もう少し置く必要があります。ポイントは、WCF インフラストラクチャが自動的に実行するため、Web メソッド内でデータをシリアル化しないことです。自分でシリアル化を行う場合、WCF には「JSON へのデータのシリアル化を停止する」などの構成があるため、返された文字列は 2 回シリアル化されます。

そのため、クライアントで二重評価 (または parseJSON) を実行します。

オブジェクトを返すだけなので、残りの作業は WCF によって行われます。クライアント側では、jQuery を使用すると、返された値をそれ自体で評価し、すぐに使用できる JavaScript オブジェクトを「succeess」コールバックに渡します (それ以上の解析は必要ありません)。

于 2011-07-07T16:58:21.893 に答える