我有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()});
在这种情况下,它会正确地反序列化读数集合。
有什么建议吗?
答案 0 :(得分:1)
使用CopyTo
(或其async
变体)可同时提高源位置和目标位置。这意味着,在构造BsonDataReader
时,输入流已经在其末端。
您应该重置信息流的位置:
stream.Position = 0;