Sto utilizzando RestSharp e utilizzo di Json.NET per la serializzazione (vedere here).Come posso fare in modo che RestSharp usi BSON?
Json.NET supporta BSON, e poiché alcune delle mie richieste hanno enormi blocchi di dati binari, penso che ciò velocizzerebbe la mia applicazione in modo drammatico. Tuttavia, per quanto posso dire, RestSharp non sembra avere alcun supporto integrato per BSON.
L'uso di Json.NET è implementato come serializzatore personalizzato per RestSharp, e quindi a prima vista sembra che sarebbe possibile modificare quel serializzatore personalizzato per utilizzare BSON. Ma, il metodo Serialize
dell'interfaccia RestSharp.Serializers.ISerializer
restituisce un string
- che è (presumo) inadatto per BSON. Quindi, presumo che ci vorranno alcune modifiche più significative a RestSharp per implementare questo cambiamento.
Qualcuno ha trovato un modo per farlo?
Aggiornamento: Ho guardato la fonte RestSharp, e ha scoperto che il metodo RestRequest.AddBody
che prende il mio scopo e serializza in corpo della richiesta alla fine chiama Request.AddParameter
(con i dati dell'oggetto serializzati, e il tipo di parametro RequestBody
).
Ho pensato che avrei potuto serializzare il mio oggetto su BSON e quindi chiamare direttamente lo Request.AddParameter
- e in effetti posso farlo. Tuttavia, quando RestSharp esegue quindi RestRequest
, non riesce a inserire il contenuto binario nella richiesta, poiché esistono altre ipotesi incorporate sul contenuto della richiesta codificato in UTF-8.
Così sembra che questo hack non funzionerebbe - non ci sarebbe bisogno di essere alcune modifiche apportate al RestSharp sé, e io non sono l'uomo per il lavoro ...
Update 2: I Ho deciso di provare a utilizzare il debugger per capire quanto di RestSharp dovrei cambiare per superare il problema di codifica del corpo, quindi ho sostituito la versione NuGet di RestSharp e ho incluso il progetto RestSharp nella mia soluzione. E ... è lavorato.
Si scopre che c'è stato un cambiamento in RestSharp negli ultimi mesi che non è ancora nella versione NuGet.
Quindi, è possibile ora utilizzare AddParameter
e passare un oggetto già BSON codificato, e RestSharp invierà via al server senza lamentarsi.
Questa risposta mi ha aiutato molto, nel caso qualcuno ottenga un'eccezione "La sequenza contiene più di n un elemento "quando aggiungo il gestore, l'ho risolto aggiungendo i gestori prima di aggiungere intestazioni predefinite all'istanza RestClient – yvesmancera