首页 > 解决方案 > Protobuf-net 和 WebApi,使用哪种格式通过网络返回数据?

问题描述

我有一个 .Net Core 3.1 WebAPI,它:

  1. 使用以下命令序列化我的 obj:ProtoBuf.Serializer.Serialize(stream, myobject);
  2. 返回它: Convert.ToBase64String(stream.GetBuffer(), 0, (int)stream.Length);

以及调用 WebAPI 的 Blazor WASM 应用程序和

  1. 从线路获取数据: MemoryStream stream = new MemoryStream(Convert.FromBase64String(await response.Content.ReadAsStringAsync()));
  2. 然后将其反序列化回我的 obj:myobj = ProtoBuf.Serializer.Deserialize(stream);

一切正常,但我怀疑这可以优化并避免一些转换为 byte[] / base4 字符串并返回。

这是通过网络传输 protobuf 数据的正确方法还是可以以更好的方式完成?

标签: asp.net-web-apiprotobuf-net

解决方案


我发现WebAPI可以直接返回ProtoBuf.Serializer.Serialize写入的流。这里的重点不是处理流(让它对 GC 进行处理)。

客户端可以 ProtoBuf.Serializer.Deserialize response.Content.ReadAsStreamAsync()。

我坚持使用 Base64string,以便服务器对内容进行 gzip 压缩,而流则不是。


推荐阅读