下载blob存储并返回Json对象

问题描述 投票:3回答:2

我正在尝试下载.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

我该怎么做才能做到这一点?

谢谢

c# json azure azure-storage-blobs memorystream
2个回答
12
投票

在将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);
                }
            }
        }

2
投票

问题和接受的答案都是从整个流复制到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
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.