Использование JSON.NET вместо сериализации WebMethod по умолчанию

В WebMethod я использую JSON.NET, чтобы вручную сериализовать свой объект, чтобы избежать проблемы с циклической ссылкой структуры сущностей.

У меня есть следующий код:

Dim qry = From m In entity.Mediators _
          Where m.MediatorNumber = mediatorNumber _
          Select m

For Each mediator In qry
    mediator.MediatorRestrictionsAvailabilities.Load()
    customMediator = mediator
Next

customJson = JsonConvert.SerializeObject(customMediator, Formatting.Indented)

Проблема в том, что результат плохо отформатирован в формате JSON и не может быть проанализирован на клиенте; это выглядит так:

{"d":"{\r\n \"$id\": \"1\",\r\n \"MediatorId\": 922,\r\n \"AreaCode\": \"E \ ",\r\n \"PFCCode\": \"840\",\r\n \"Имя\": \"Джо\",\r\n \"Фамилия\": \"Смит\", \r\n

Проведя некоторое исследование, я узнал, что это происходит, когда JSON повторно сериализуется в JSON.

Как мне сделать свою собственную сериализацию без использования сериализатора по умолчанию?


person Asmussen    schedule 09.08.2011    source источник
comment
Насколько я знаю, веб-сервисы ASP.NET не предлагают замену сериализации на другую. Вы можете предоставить только пользовательские преобразователи.   -  person Ladislav Mrnka    schedule 10.08.2011


Ответы (2)


У меня была аналогичная проблема некоторое время назад, и вот предложения, которые мне дали. Мое решение заключалось в том, что мне не нужно было снова сериализовать объект в json, поскольку он уже был сериализован.

Удачи и надеюсь, что это поможет некоторым.

person Chris    schedule 09.08.2011
comment
Крис спасибо за ответ. Вы правы, но я не могу использовать собственный сериализатор, потому что в моем случае он вызывает ошибку циклической ссылки. Я должен использовать JSON.NET для вывода пользовательского JSON. - person Asmussen; 10.08.2011
comment
Поэтому вам, вероятно, придется написать собственный обработчик .ashx и самостоятельно имитировать поведение службы или изменить код объекта, чтобы не сериализовать циклические ссылки. - person Ladislav Mrnka; 10.08.2011

Для циклической ссылки используйте этот подход:

string json = JsonConvert.SerializeObject(
  infoToSerialize, Formatting.Indented,
  new JsonSerializerSettings{ ReferenceLoopHandling =
  ReferenceLoopHandling.Ignore
});
person user3087556    schedule 07.04.2017