我正在使用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