首页 > 解决方案 > 在 azure 函数中接收 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()});

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

有什么建议么?

标签: c#asp.net-web-apiazure-functionsbson

解决方案


使用CopyTo(或其async变体)同时推进源和目标的位置。这意味着当您构造BsonDataReader输入流时,它已经结束了。

您应该重置流的位置:

stream.Position = 0;

推荐阅读