Лучший способ вернуть JSON в JScript с помощью json.net - PullRequest
1 голос
/ 07 июля 2011

Я возвращаю JSON с использованием WCF и 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);

Возвращается строка JSON, которую нужно проанализировать, используя parseJSON

   var obj = $.parseJSON(retorno);

Это лучший / правильный способ вернуть результат JSON, который будет использоваться клиентской стороной JScript? Есть ли способ вернуть что-то кроме строки и избежать синтаксического анализа?

EDIT

На стороне клиента я использую MVC3, а не ASP.NET Web Forms. Tks

1 Ответ

2 голосов
/ 07 июля 2011

Нет, вы делаете одну распространенную ошибку.Возьмите этот пост, чтобы посмотреть

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

и никогда не делайте этого:)

РЕДАКТИРОВАТЬ

Нужно поставить еще немного,Дело в том, что вы никогда не должны сериализовать данные внутри веб-метода, потому что инфраструктура WCF сделает это за вас.Если вы выполняете сериализацию самостоятельно, в WCF есть конфигурация, например, «прекратить сериализацию моих данных в JSON», поэтому ваша восстановленная строка будет сериализована дважды.

Из-за этого вы сделаете double eval (или parseJSON) на клиенте.

Поскольку вы просто возвращаете объект, остальная часть работы будет выполнена WCF.На стороне клиента, если вы используете jQuery, он сам оценит возвращаемое значение и передаст готовый к использованию объект javascript в обратный вызов 'successess' (дальнейший разбор не требуется).

...