我正在使用RestSharp並使用Json.NET進行序列化(請參閱here)。如何讓RestSharp使用BSON?
Json.NET支持BSON,並且由於我的一些請求有大量的二進制數據塊,我認爲這會顯着加速我的應用程序。但是,據我所知,RestSharp似乎沒有任何對BSON的內置支持。
Json.NET的使用是作爲RestSharp的自定義序列化程序實現的,所以乍一看看它可能會修改該自定義序列化程序以使用BSON。但是,Serialize
接口的方法返回string
- 這是(我認爲)不適合BSON。因此,我認爲這需要對RestSharp進行一些更重大的更改才能實現此更改。
有沒有人想出了一個辦法呢?
更新:我看了一下RestSharp來源,發現RestRequest.AddBody
方法把我的對象,並將其序列化到請求主體最終調用Request.AddParameter
(與序列化對象的數據,參數類型RequestBody
)。
我想我可以將我的對象序列化到BSON,然後直接撥打Request.AddParameter
- 事實上我可以。但是,當RestSharp然後執行RestRequest
時,它無法將二進制內容放入請求中,因爲還有其他關於請求內容的嵌入假設是UTF-8編碼的。
因此它看起來像這個技巧是行不通的 - 那裏將需要作出RestSharp本身的一些變化,我不適合做這項工作...
更新2:我決定去使用調試器來弄清楚爲了克服身體編碼問題我需要改變多少RestShrp,所以我換出了我的NuGet版本的RestSharp,並將RestSharp項目包含在我的解決方案中。並且...它工作。
事實證明,在過去的幾個月裏,對於尚未在NuGet版本中的RestSharp進行了更改。
所以,你可以現在使用AddParameter
並傳入一個已經BSON編碼的對象,RestSharp將發送它到服務器沒有投訴。
這個答案幫了我很多,萬一有人得到異常「序列包含更多的臨時表ñ一個元素「添加處理程序時,我通過添加處理程序添加默認標題到RestClient實例之前解決它 – yvesmancera