【问题标题】:Download blob storage and return Json object下载 blob 存储并返回 Json 对象
【发布时间】:2016-04-25 10:59:53
【问题描述】:

我正在尝试下载一个 .json blob,该 blob 已存储在 Azure Storage 的容器中,并使用 Newtonsoft.Json 将其写入对象。

我这样做是通过调用:

(CloudBlockBlob) blob.DownloadToStream(stream);

但是,我不想将流写入本地应用程序目录中的文件,而是返回 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.DownloadToStream(stream);之后将流的位置重置为0
  • 成功了!谢谢!如果您发布答案,我会接受。

标签: c# json azure azure-blob-storage memorystream


【解决方案1】:

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

【讨论】:

  • 始终指定示例中使用的库 - 添加使用 ;)
  • 嗨,当我使用此代码时,它可以工作,但输出是带有“{{”的 json 对象,我无法将其转换为 Datatable !请问有什么建议吗?
  • @EmnaJaoua 请提出一个新问题,而不是在 cmets 中提出。请尽可能分享所有细节。
  • 我为简短的评论道歉。我通过修改变量 result = @"[" + result + "]" 解决了我的问题。所以我可以把它转换成dataTable。
【解决方案2】:

问题和接受的答案都从将整个流复制到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);
}

【讨论】:

    【解决方案3】:

    如果您不关心流式传输并想要一种简洁明了的方式:

    var json = await blockBlob.DownloadTextAsync();
    
    var myObject = JsonConvert.DeserializeObject<MyObject>(json);
    

    【讨论】:

      猜你喜欢
      • 2019-04-18
      • 2018-08-03
      • 2012-12-08
      • 2015-08-03
      • 2018-03-11
      • 2021-07-25
      • 2019-12-19
      • 2019-09-05
      • 2017-12-29
      相关资源
      最近更新 更多