gpt4 book ai didi

serialization - 如何让 RestSharp 使用 BSON?

转载 作者:行者123 更新时间:2023-12-04 11:25:51 25 4
gpt4 key购买 nike

我正在使用 RestSharp,并使用 Json.NET 进行序列化(参见 here)。

Json.NET 支持 BSON,并且由于我的一些请求包含大量二进制数据,我认为这将大大加快我的应用程序的速度。但是,据我所知,RestSharp 似乎没有对 BSON 的任何内置支持。

Json.NET 的使用是作为 RestSharp 的自定义序列化程序实现的,因此乍一看似乎可以修改该自定义序列化程序以使用 BSON。但是,Serialize RestSharp.Serializers.ISerializer 的方法接口(interface)返回 string - 这(我认为)不适合 BSON。因此,我认为需要对 RestSharp 进行一些更重大的更改才能实现此更改。

有没有人想出办法做到这一点?

更新:我查看了 RestSharp 源代码,发现 RestRequest.AddBody获取我的对象并将其序列化为请求正文的方法最终调用 Request.AddParameter (带有序列化的对象数据和参数类型 RequestBody )。

我想我也许可以将我的对象序列化为 BSON,然后调用 Request.AddParameter直接 - 我确实可以。但是,当 RestSharp 然后执行 RestRequest ,它无法将二进制内容放入请求中,因为还有其他关于请求内容是 UTF-8 编码的嵌入假设。

因此,看起来这个 hack 是行不通的——需要对 RestSharp 本身进行一些更改,而且我不是这个工作的人......

更新 2:我决定尝试使用调试器来确定我必须更改多少 RestSharp 才能克服正文编码问题,所以我换掉了我的 NuGet 版本的 RestSharp 并将 RestSharp 项目包含在我的解决方案。还有……它工作过 .

事实证明,在过去的几个月里,RestSharp 发生了变化,但 NuGet 版本中还没有。

因此,您现在可以使用 AddParameter并传入一个已经 BSON 编码的对象,RestSharp 会将其发送到服务器而不会提示。

最佳答案

根据我的问题中的更新,事实证明,如果您拥有最新的 RestSharp 源代码,那么请不要这样做:

        request.AddBody(myObject);

...只要你有一个可以从使用 BSON 中受益的有效负载,你就可以这样做:
        using (var memoryStream = new System.IO.MemoryStream())
{
using (var bsonWriter = new Newtonsoft.Json.Bson.BsonWriter(memoryStream))
{
var serializer = new Newtonsoft.Json.JsonSerializer();

serializer.Serialize(bsonWriter, myObject);

var bytes = memoryStream.ToArray();

request.AddParameter("application/bson", bytes, RestSharp.ParameterType.RequestBody);
}
}

注意 AddParameter 的第一个参数应该是参数名称,但在 ParameterType.RequestBody 的情况下它实际上用作内容类型。 ( Jade )。

请注意,这依赖于 change由 ewanmellor/ayoung 于 2013 年 4 月 11 日向 RestSharp 制作,此更改不在 NuGet (104.1) 上的当前版本中。因此,仅当您在项目中包含当前的 RestSharp 源时,这才有效。

关于serialization - 如何让 RestSharp 使用 BSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18357134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com