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()); 

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

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

 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
  • Сериализация с Qt
  • Уничтожить stream массива json по одному элементу за раз
  • Использование jQuery для захвата содержимого из iframe CKEditor
  • Ошибка JSON.NET Локальный цикл привязки для типа
  • Сериализовать статический class?
  • Невозможно десериализовать lambda
  • Как десериализовать объект JObject для .NET
  • Можно ли выполнять бинарную сериализацию .NET в случае, если у вас нет исходного кода classа?
  • Сериализация нескольких свойств DateTime в одном classе с использованием разных форматов для каждого из них
  • Сериализация / десериализация пользовательской коллекции с дополнительными свойствами с помощью Json.Net
  • Преобразование байтов в Int / uint в C
  • Давайте будем гением компьютера.