Ich verwende RestSharp und Json.NET für die Serialisierung (siehe here).Wie kann ich RestSharp BSON verwenden?
Json.NET unterstützt BSON, und da einige meiner Anfragen riesige Blöcke von Binärdaten enthalten, würde dies meine Anwendung dramatisch beschleunigen. Soweit ich das beurteilen kann, scheint RestSharp keine eingebaute Unterstützung für BSON zu haben.
Die Verwendung von Json.NET ist als benutzerdefinierter Serializer für RestSharp implementiert, und auf den ersten Blick sieht es so aus, als wäre es möglich, diesen benutzerdefinierten Serializer für die Verwendung von BSON zu modifizieren. Aber die Serialize
Methode der RestSharp.Serializers.ISerializer
Schnittstelle gibt eine string
zurück - die (ich nehme an) für BSON ungeeignet ist. Also nehme ich an, dass RestSharp noch einige wichtige Änderungen benötigt, um diese Änderung zu implementieren.
Hat jemand einen Weg gefunden, dies zu tun?
Update: Ich schaute auf die RestSharp Quelle und entdeckt, dass die RestRequest.AddBody
Methode, die meine Aufgabe übernimmt und serialisiert sie in die Anforderungs Körper Request.AddParameter
schließlich ruft (mit den serialisierten Objektdaten und der Parametertyp RequestBody
).
Ich dachte, dass ich in der Lage sein könnte, mein Objekt zu BSON serialisieren und dann Request.AddParameter
direkt anrufen - und tatsächlich kann ich. Wenn RestSharp dann jedoch RestRequest
ausführt, kann der binäre Inhalt nicht in die Anforderung eingefügt werden, da andere eingebettete Annahmen über den UTF-8-codierten Anforderungsinhalt bestehen.
So sieht es aus wie diesem Hack würde nicht funktionieren - es müssten einige Änderungen vorgenommen werden, sich RestSharp, und ich bin nicht der Mann für den Job ...
Update 2: I Ich entschied mich dafür, den Debugger zu verwenden, um herauszufinden, wie viel von RestSharp ich ändern musste, um das Problem der Körpercodierung zu beheben, also tauschte ich meine NuGet-Version von RestSharp aus und fügte das RestSharp-Projekt in meine Lösung ein. Und ... es arbeitete.
Es stellt sich heraus, dass in den letzten Monaten eine Änderung an RestSharp vorgenommen wurde, die noch nicht in der NuGet-Version enthalten ist.
Also, Sie können jetzt AddParameter
verwenden und geben in einem bereits BSON-kodierte Objekt und RestSharp wird es sendet an den Server klaglos ab.
Diese Antwort hat mir sehr geholfen, falls jemand eine Ausnahme bekommt "Sequenz enthält mehr tha n ein Element "Beim Hinzufügen des Handlers habe ich ihn durch Hinzufügen von Handlern korrigiert, bevor ich Standard-Header zur RestClient-Instanz hinzufügte – yvesmancera