在 azure 函数中接收 bson 流
Receive bson stream in azure function
我有 azure 函数,它接受巨大的 bson 对象。它绑定到 http 请求,然后尝试使用带有以下代码的流对其进行反序列化:
using (var stream = new MemoryStream())
{
await request.Content.CopyToAsync(stream);
using (var reader = new BsonDataReader(stream))
{
var serializer = new JsonSerializer();
var readings =
serializer.Deserialize<IEnumerable<ProviderReading>>(reader);
}
}
readings
对象始终为空。
我使用标准 ReadAsAsync
方法对其进行了测试:
var test = await request.Content.ReadAsAsync<List<ProviderReading>>(
new[]{new BsonMediaTypeFormatter()});
在这种情况下,它会正确反序列化读数集合。
有什么建议吗?
使用 CopyTo
(或其 async
变体)可同时提高源和目标的位置。这意味着当您构建 BsonDataReader
时,输入流已经结束。
您应该重置流的位置:
stream.Position = 0;
我有 azure 函数,它接受巨大的 bson 对象。它绑定到 http 请求,然后尝试使用带有以下代码的流对其进行反序列化:
using (var stream = new MemoryStream())
{
await request.Content.CopyToAsync(stream);
using (var reader = new BsonDataReader(stream))
{
var serializer = new JsonSerializer();
var readings =
serializer.Deserialize<IEnumerable<ProviderReading>>(reader);
}
}
readings
对象始终为空。
我使用标准 ReadAsAsync
方法对其进行了测试:
var test = await request.Content.ReadAsAsync<List<ProviderReading>>(
new[]{new BsonMediaTypeFormatter()});
在这种情况下,它会正确反序列化读数集合。
有什么建议吗?
使用 CopyTo
(或其 async
变体)可同时提高源和目标的位置。这意味着当您构建 BsonDataReader
时,输入流已经结束。
您应该重置流的位置:
stream.Position = 0;