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
  • Пользовательский серализатор Gson для одной переменной (из многих) в объекте с использованием TypeAdapter
  • C # JSON.NET - десериализация ответа, использующего необычную структуру данных
  • Как сериализовать lambda?
  • Избегайте сериализации jacksonа на непривлекательных ленивых объектах
  • ТипNameHandling предостережение в Newtonsoft Json
  • Можете ли вы определить, был ли объект, десериализованный объект, отсутствием поля с classом JsonConvert в Json.NET
  • Может ли Json.NET сериализовать / десериализовать в / из streamа?
  • Как настроить сериализацию списка объектов JAXB для JSON?
  • Как вы сериализуете объект на C ++?
  • Добавление к ObjectOutputStream
  • Исключение «Исключительная привязка к реляционной ссылке» с JSON.Net
  • Давайте будем гением компьютера.