c# - 在 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()});
在这种情况下,它会正确反序列化读数集合。
有什么建议么?
解决方案
使用CopyTo
(或其async
变体)同时推进源和目标的位置。这意味着当您构造BsonDataReader
输入流时,它已经结束了。
您应该重置流的位置:
stream.Position = 0;
推荐阅读
- reportportal - gradle 多项目设置中的 Reportportal 属性文件
- android - java.lang.RuntimeException:清单合并失败,出现多个错误,
- go - 在 Go 中为 ID 使用新类型的包装器是惯用的吗?
- java - 从单个 Java 流中提取多个值
- python - 如何在 Windows 中将 python 3.7 更改为 3.6
- python - 通过 pymongo 从 mongodb 获取范围内的数据条目
- css - 计算 div 的高度并将该数字放在 ::after 伪元素内容中
- python - 将双引号写入 Csv Python CSV 模块时出错
- javascript - React/Firebase 用户注册承诺 - 无法在未安装的组件上调用 setState
- blueprism - 错误 - 突出显示结果 - 未找到匹配的窗口