我正在尝试下载.json
blob,我使用Azure Storage
将其存储在Newtonsoft.Json
的容器中,将其写入对象。
我这样做是通过调用:
(CloudBlockBlob) blob.DownloadToStream(stream);
但是,我没有将流写入本地app目录中的文件,而是想返回执行object
的json Json(result)
这是我尝试过的:
using (var stream = new MemoryStream())
{
blob.DownloadToStream(stream);
var serializer = new JsonSerializer();
using (var sr = new StreamReader(stream))
{
using (var jsonTextReader = new JsonTextReader(sr))
{
result = serializer.Deserialize(jsonTextReader);
}
}
}
最后,我的jsonTextReader
变量为空,对象为null
我该怎么做才能做到这一点?
谢谢
在将blob读入流后,请将流的位置重置为0
。所以你的代码是:
using (var stream = new MemoryStream())
{
blob.DownloadToStream(stream);
stream.Position = 0;//resetting stream's position to 0
var serializer = new JsonSerializer();
using (var sr = new StreamReader(stream))
{
using (var jsonTextReader = new JsonTextReader(sr))
{
var result = serializer.Deserialize(jsonTextReader);
}
}
}
问题和接受的答案都是从整个流复制到MemoryStream
开始的,using (var stream = await blob.OpenReadAsync())
using (var sr = new StreamReader(stream))
using (var jr = new JsonTextReader(sr))
{
result = JsonSerializer.CreateDefault().Deserialize<T>(jr);
}
实际上是内存中的一个大字节数组。此步骤是不必要的 - 将blob数据直接流式传输到对象而不首先缓冲字节会更加节省内存:
qazxswpoi