私はRestSharpを使用しており、シリアル化にはJson.NETを使用しています(hereを参照)。RestSharpにBSONを使用させるにはどうすればいいですか?
Json.NETはBSONをサポートしています。私の要求の中には、膨大なバイナリデータブロックがあるため、アプリケーションを大幅に高速化できると思います。しかし、私が知る限り、RestSharpはBSONの内蔵サポートを持っていないようです。
Json.NETの使用は、RestSharpのカスタムシリアライザとして実装されています。そのため、一見すると、カスタムシリアルライザを変更してBSONを使用できるように見えます。しかし、RestSharp.Serializers.ISerializer
インターフェイスのSerialize
メソッドは、string
を返します。これはBSONには適していません。したがって、この変更を実装するためにRestSharpにさらに重要な変更が加えられると思います。
誰かがこれを行う方法を考え出しましたか?
アップデート:私はRestSharpソースを見て、私のオブジェクトを受け取り、リクエストボディにそれをシリアライズRestRequest.AddBody
方法は、最終的に(シリアル化されたオブジェクトのデータで、およびパラメータの型RequestBody
)Request.AddParameter
を呼び出すことを発見しました。
オブジェクトをBSONにシリアル化してRequest.AddParameter
を直接呼び出すことができると私は考えました。しかし、RestSharpがRestRequest
を実行すると、要求内容がUTF-8でエンコードされていると仮定するため、バイナリコンテンツを要求に入れることができません。このハックが働かないようにこのように見える
- そこに自分自身をRestSharpするために作られたいくつかの変更をする必要があり、私は仕事のための人間じゃないでしょう...
アップデート2:Iデバッガを使用して、Body-Encodingの問題を解決するためにRestSharpをどれだけ変更する必要があるかを把握することにしたので、RestSharpのNuGetバージョンを交換し、RestSharpプロジェクトを私のソリューションに含めました。そして...それはを働いた。
ここ数ヶ月でRestSharpに変更があり、まだNuGetバージョンにはないことが判明しました。
は現在AddParameter
を使用し、すでにBSONエンコードされたオブジェクトを渡します。RestSharpはそれをサーバーに送信します。
request.AddBody(myObject);
あなたが希望ペイロードを持っている時はいつでも...あなたの代わりにこれを行うことができます:
私の質問では、更新毎
この回答は、誰かが例外を取得する場合に役立ちました。「Sequence contains tha more n個の要素 "を追加した後、RestClientインスタンスにDefault Headersを追加する前にHandlerを追加して修正しました – yvesmancera