Używam RestSharp, i przy użyciu Json.NET do serializacji (patrz here).Jak mogę sprawić, aby RestSharp używał BSON?
Json.NET obsługuje BSON, a ponieważ niektóre z moich żądań mają ogromne bloki danych binarnych, myślę, że to znacznie przyspieszyłoby moją aplikację. Jednak, o ile wiem, RestSharp nie ma wbudowanej obsługi BSON.
Użycie Json.NET jest implementowane jako niestandardowy serializer dla RestSharp, więc na pierwszy rzut oka wygląda na to, że można zmodyfikować ten niestandardowy serializator do korzystania z BSON. Ale metoda Serialize
interfejsu zwraca wartość string
- która jest (moim zdaniem) nieodpowiednia dla BSON. Zakładam więc, że RestSharp wprowadzi kilka znaczących zmian, aby wprowadzić tę zmianę.
Czy ktoś wymyślił sposób, aby to zrobić?
Aktualizacja: Spojrzałem na źródła RestSharp i odkrył, że metoda RestRequest.AddBody
że ma mój obiekt i serializes go do organizmu żądanie ostatecznie nazywa Request.AddParameter
(z serializowanych danych obiektowych, a typ parametru RequestBody
).
Doszedłem do wniosku, że mogę przetworzyć mój obiekt na BSON, a następnie zadzwonić pod numer Request.AddParameter
- i rzeczywiście mogę. Jednak, gdy RestSharp wykonuje następnie RestRequest
, nie umieszcza zawartości binarnej w żądaniu, ponieważ istnieją inne założone założenia dotyczące treści żądania, która jest kodowana w UTF-8.
Zatem wygląda na to włamania nie będzie działać - nie musiałyby być jakieś zmiany dokonane RestSharp się, a ja nie jestem człowiekiem do tego zadania ...
Aktualizacja 2: zdecydowałem, że będę musiał użyć debuggera, aby dowiedzieć się, ile RestSharp musiałbym zmienić, aby rozwiązać problem kodowania ciała, więc zamieniłem moją wersję RestSharp na NuGet i zawarłem projekt RestSharp w moim rozwiązaniu. I ... to pracował.
Okazuje się, że nastąpiła zmiana w RestSharp w ciągu ostatnich kilku miesięcy, która nie jest jeszcze w wersji NuGet.
Tak więc, ty możesz teraz używać teraz użyć AddParameter
i przekazać obiekt już zakodowany BSON, a RestSharp wyśle go na serwer bez skargi.
Ta odpowiedź bardzo mi pomogła, na wypadek gdyby ktoś dostał wyjątek "Sekwencja zawiera więcej" n jeden element "podczas dodawania handler'a, naprawiłem go dodając Handlers przed dodaniem Default Headers do instancji RestClient – yvesmancera