下载 blob 存储和 return Json 对象
Download blob storage and return Json object
我正在尝试下载存储在 Azure Storage
容器中的 .json
blob,使用 Newtonsoft.Json
将其写入对象。
我正在调用:
(CloudBlockBlob) blob.DownloadToStream(stream);
但是,我不想将流写入本地应用程序目录中的文件,而是想 return json object
做 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
开始,这实际上是内存中的一个大字节数组。这一步是不必要的 - 将 blob 数据直接流式传输到对象而不先缓冲字节会更节省内存:
using (var stream = await blob.OpenReadAsync())
using (var sr = new StreamReader(stream))
using (var jr = new JsonTextReader(sr))
{
result = JsonSerializer.CreateDefault().Deserialize<T>(jr);
}
如果您不喜欢流式传输并想要一种简洁明了的方式:
var json = await blockBlob.DownloadTextAsync();
var myObject = JsonConvert.DeserializeObject<MyObject>(json);
我正在尝试下载存储在 Azure Storage
容器中的 .json
blob,使用 Newtonsoft.Json
将其写入对象。
我正在调用:
(CloudBlockBlob) blob.DownloadToStream(stream);
但是,我不想将流写入本地应用程序目录中的文件,而是想 return json object
做 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
开始,这实际上是内存中的一个大字节数组。这一步是不必要的 - 将 blob 数据直接流式传输到对象而不先缓冲字节会更节省内存:
using (var stream = await blob.OpenReadAsync())
using (var sr = new StreamReader(stream))
using (var jr = new JsonTextReader(sr))
{
result = JsonSerializer.CreateDefault().Deserialize<T>(jr);
}
如果您不喜欢流式传输并想要一种简洁明了的方式:
var json = await blockBlob.DownloadTextAsync();
var myObject = JsonConvert.DeserializeObject<MyObject>(json);