在 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;