Я использую RestSharp и Json.NET для сериализации (см. здесь).
Json.NET поддерживает BSON, и, поскольку некоторые из моих запросов содержат огромные блоки двоичных данных, я думаю, что это значительно ускорит мое приложение. Однако, насколько я могу судить, RestSharp не имеет встроенной поддержки BSON.
Использование Json.NET реализовано как пользовательский сериализатор для RestSharp, поэтому на первый взгляд кажется, что можно изменить этот пользовательский сериализатор для использования BSON. Но метод Serialize
интерфейса RestSharp.Serializers.ISerializer
возвращает string
, что (я предполагаю) не подходит для BSON. Итак, я предполагаю, что для реализации этого изменения в RestSharp потребуются более значительные изменения.
Кто-нибудь нашел способ сделать это?
Обновление: я просмотрел источник RestSharp и обнаружил, что метод RestRequest.AddBody
, который берет мой объект и сериализует его в тело запроса, в конечном итоге вызывает Request.AddParameter
(с сериализованными данными объекта и типом параметра RequestBody
).
Я подумал, что смогу сериализовать свой объект в BSON, а затем напрямую вызвать Request.AddParameter
— и действительно могу. Однако когда RestSharp затем выполняет RestRequest
, ему не удается поместить двоичное содержимое в запрос, поскольку существуют другие встроенные предположения о том, что содержимое запроса закодировано в UTF-8.
Таким образом, похоже, что этот хак не сработает - нужно будет внести некоторые изменения в сам RestSharp, а я не человек для этой работы...
Обновление 2: я решил попробовать использовать отладчик, чтобы выяснить, сколько RestSharp мне придется изменить, чтобы решить проблему с кодировкой тела, поэтому я заменил свою версию NuGet RestSharp и включил проект RestSharp в свой решение. И... это сработало.
Оказывается, за последние несколько месяцев в RestSharp произошли изменения, которых еще нет в версии NuGet.
Таким образом, теперь вы можете использовать AddParameter
и передавать уже закодированный в BSON объект, а RestSharp без проблем отправит его на сервер.