我正在使用 RestSharp,并使用 Json.NET 进行序列化(请参阅此处)。
Json.NET 支持 BSON,并且由于我的一些请求包含大量二进制数据,我认为这将大大加快我的应用程序的速度。但是,据我所知,RestSharp 似乎没有对 BSON 的任何内置支持。
Json.NET 的使用是作为 RestSharp 的自定义序列化程序实现的,因此乍一看似乎可以修改该自定义序列化程序以使用 BSON。但是,接口的Serialize
方法RestSharp.Serializers.ISerializer
返回一个string
- (我假设)不适合 BSON。因此,我认为需要对 RestSharp 进行一些更重大的更改才能实现此更改。
有没有人想出办法做到这一点?
更新:我查看了 RestSharp 源代码,发现RestRequest.AddBody
获取我的对象并将其序列化到请求正文中的方法最终调用Request.AddParameter
(使用序列化的对象数据和参数 type RequestBody
)。
我想我也许可以将我的对象序列化为 BSON,然后Request.AddParameter
直接调用 - 事实上我可以。但是,当 RestSharp 然后执行 时RestRequest
,它无法将二进制内容放入请求中,因为还有其他关于请求内容是 UTF-8 编码的嵌入假设。
因此,看起来这种 hack 是行不通的——需要对 RestSharp 本身进行一些更改,而且我不是这个工作的人......
更新 2:我决定尝试使用调试器来确定我必须更改多少 RestSharp 才能克服正文编码问题,所以我换掉了我的 NuGet 版本的 RestSharp 并将 RestSharp 项目包含在我的解决方案。而且……它奏效了。
事实证明,在过去的几个月里,RestSharp 发生了变化,但 NuGet 版本中还没有。
因此,您现在可以使用AddParameter
并传入一个已经 BSON 编码的对象,RestSharp 会毫无怨言地将其发送到服务器。