在Azure函数中接收bson流

时间:2018-07-16 10:24:50

标签: c# asp.net-web-api azure-functions bson

我有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()});

在这种情况下,它会正确地反序列化读数集合。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

使用CopyTo(或其async变体)可同时提高源位置和目标位置。这意味着,在构造BsonDataReader时,输入流已经在其末端。

您应该重置信息流的位置:

stream.Position = 0;