我正在使用RestSharp,使用Json.NET进行序列化(请参见这里)。
Json.NET支持BSON,由于我的一些请求具有大块的二进制数据,因此我认为这将极大地加快我的应用程序速度。但是,据我所知,RestSharp似乎没有内置支持BSON。
Json.NET的使用是作为RestSharp的自定义序列化器实现的,因此乍一看,似乎可以修改该自定义序列化器以使用BSON。但是,RestSharp.Serializers.ISerializer接口的Serialize方法返回一个字符串-我认为这不适合BSON。因此,我认为需要对RestSharp进行更重大的更改才能实现此更改。
有人找到了实现这一点的方法吗?
更新:我查看了RestSharp源代码,并发现
更新2:我决定使用调试器来找出需要更改的RestSharp部分以克服body-encoding问题,因此我替换了NuGet版本的RestSharp并将RestSharp项目包含在我的解决方案中。然后...它起作用了。
原来,在过去几个月中,RestSharp发生了变化,但NuGet版本尚未更新。
所以,现在您可以使用
Json.NET支持BSON,由于我的一些请求具有大块的二进制数据,因此我认为这将极大地加快我的应用程序速度。但是,据我所知,RestSharp似乎没有内置支持BSON。
Json.NET的使用是作为RestSharp的自定义序列化器实现的,因此乍一看,似乎可以修改该自定义序列化器以使用BSON。但是,RestSharp.Serializers.ISerializer接口的Serialize方法返回一个字符串-我认为这不适合BSON。因此,我认为需要对RestSharp进行更重大的更改才能实现此更改。
有人找到了实现这一点的方法吗?
更新:我查看了RestSharp源代码,并发现
RestRequest.AddBody
方法将我的对象序列化到请求体中,最终调用了Request.AddParameter
(使用序列化的对象数据和参数类型RequestBody
)。我想,我可以将对象序列化为BSON,然后直接调用Request.AddParameter
,事实上我确实可以。但是,当RestSharp执行RestRequest
时,它无法将二进制内容放入请求中,因为有其他嵌入式假设,即请求内容被UTF-8编码。因此,这个hack似乎行不通 - 需要对RestSharp本身进行一些更改,而我不是做这份工作的人...
更新2:我决定使用调试器来找出需要更改的RestSharp部分以克服body-encoding问题,因此我替换了NuGet版本的RestSharp并将RestSharp项目包含在我的解决方案中。然后...它起作用了。
原来,在过去几个月中,RestSharp发生了变化,但NuGet版本尚未更新。
所以,现在您可以使用
AddParameter
并传入已经编码为BSON的对象,RestSharp会将其发送到服务器而不会抱怨。