JSON.NET Parser * кажется * будет двойной сериализацией моих объектов

Моя проблема заключается в следующем:

Это ответ, который отправляется обратно с моего controllerа WebAPI.

"[ [ {\"id\":\"identifier\"}, {\"name\":\"foobar\"} ] ]" 

Обратите внимание, что ответ заверяется в цитаты, и все введенные цитаты экранированы. Это, очевидно, проблема. Есть ли какие-либо настройки, которые я могу предоставить Серийному устройству JSON.NET, чтобы это не произошло?

редактировать

Как полагал pswg в своем ответе, я использовал JSON.NET

 JsonConvert.SerializeObject(instance) 

для выполнения моей сериализации.

Я сделал это, потому что, когда я создавал свои собственные преобразователи, я включил их в JsonConvert.DefaultSettings в моем WepApiConfig (и я, очевидно, думал, что это не будет проблемой)

Ранее я пытался поменять тип возвращаемого значения HttpGets на «мой тип объекта», и ответ был json-представлением метода ToString () моего объекта …, который дал мне знать, что сериализация не проходит через мои конвертеры.

Изменение типа возврата моих HttpGets из строки в «мой тип объекта» и подключение этих конвертеров прямо к настройке HttpConfiguration по умолчанию для WebAPi сделали трюк.

 config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new FooConverter()); config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new BarConverter()); 

Очень просто.

One Solution collect form web for “JSON.NET Parser * кажется * будет двойной сериализацией моих объектов”

У вас, вероятно, есть что-то вроде этого:

 public string GetFoobars() { var foobars = ... return JsonConvert.SerializeObject(foobars); } 

В этом случае вы сериализуете объект в строку с Json.NET, а затем возвращаете результат как строку, controller API будет сериализовать строку как литерал строки JavaScript, что приведет к тому, что строка будет завернута в двойные кавычки и заставит любые другие специальные символы внутри строки сбрасываться с обратной косой чертой.

Решение состоит в том, чтобы просто вернуть объекты самостоятельно:

 public IEnumerable GetFoobars() { var foobars = ... return foobars; } 

Это заставит controller API сериализовать объекты с использованием его настроек по умолчанию, то есть он будет сериализовать результат как XML или JSON в зависимости от параметров, переданных от клиента.

Дальнейшее чтение

  • JSON и XML-сериализация в веб-интерфейсе ASP.NET
  • Как вы делаете глубокую копию объекта в .NET (например, C #)?
  • Как добавить тип в белый список политики сериализации GWT?
  • Использование преобразователей Json.NET для десериализации свойств
  • Использование jQuery для захвата содержимого из iframe CKEditor
  • XSLT: как преобразовать XML-узел в строку
  • Исключить свойство из сериализации через пользовательский атрибут (json.net)
  • Удаление десериализации полиморфных classов json без информации о типе с использованием json.net
  • Ошибка JSON.NET Локальный цикл привязки для типа
  • GSON десериализует значение ключа для пользовательского объекта
  • Как изменить имена свойств при сериализации с помощью Json.net?
  • «Тип не ожидается», используя DataContractSerializer - но это просто class, не смешные вещи?
  • Давайте будем гением компьютера.