【发布时间】:2018-02-23 12:44:05
【问题描述】:
我正在使用 Marc Gravell 的 Protobub-Net 来序列化和反序列化对象。
我正在寻找通过http:// 请求传输数据的最有效方式。
这是我到目前为止所做的:
public string ProtobuffToString()
{
Dictionary<int, decimal> List1 = new Dictionary<int, decimal>();
List1.Add(2018, 1.2m);
List1.Add(2017, 1.4m);
List1.Add(2016, 1.9m);
using (var stream = new MemoryStream())
{
ProtoBuf.Serializer.Serialize(stream, List1);
return Convert.ToBase64String(stream.ToArray());
}
}
public async System.Threading.Tasks.Task<string> ReadProtobuffAsync()
{
using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient())
using (System.Net.Http.HttpResponseMessage response = await client.GetAsync("http://localhost:53204/ProtobuffToString")) //<= Will call ProtobuffToString() above
using (System.Net.Http.HttpContent content = response.Content)
{
string result = await content.ReadAsStringAsync();
byte[] resultByte = Convert.FromBase64String(result);
using (var stream = new MemoryStream(resultByte))
{
return JsonConvert.SerializeObject(ProtoBuf.Serializer.Deserialize<Dictionary<int, decimal>>(stream));
}
}
}
我可以做得更好吗?
比从 json/Json.Net 传输它更好/更快吗?
也许是的,因为数据传输会更小,序列化/反序列化更快。
【问题讨论】:
-
按原样写入响应即可,无需转换为字符串。
-
最高效的定义是什么?你如何评价这个,你用什么样的指标来判断它
-
您可以直接在请求和响应中写入和读取二进制流。 Base64 编码完全没有必要。
标签: c# .net protobuf-net data-transfer-objects