asp.net-web-api - Protobuf-net 和 WebApi,使用哪种格式通过网络返回数据?
问题描述
我有一个 .Net Core 3.1 WebAPI,它:
- 使用以下命令序列化我的 obj:ProtoBuf.Serializer.Serialize(stream, myobject);
- 返回它: Convert.ToBase64String(stream.GetBuffer(), 0, (int)stream.Length);
以及调用 WebAPI 的 Blazor WASM 应用程序和
- 从线路获取数据: MemoryStream stream = new MemoryStream(Convert.FromBase64String(await response.Content.ReadAsStringAsync()));
- 然后将其反序列化回我的 obj:myobj = ProtoBuf.Serializer.Deserialize(stream);
一切正常,但我怀疑这可以优化并避免一些转换为 byte[] / base4 字符串并返回。
这是通过网络传输 protobuf 数据的正确方法还是可以以更好的方式完成?
解决方案
我发现WebAPI可以直接返回ProtoBuf.Serializer.Serialize写入的流。这里的重点不是处理流(让它对 GC 进行处理)。
客户端可以 ProtoBuf.Serializer.Deserialize response.Content.ReadAsStreamAsync()。
但
我坚持使用 Base64string,以便服务器对内容进行 gzip 压缩,而流则不是。