C# 下载blob存储并返回Json对象

C# 下载blob存储并返回Json对象,c#,json,azure,azure-storage-blobs,memorystream,C#,Json,Azure,Azure Storage Blobs,Memorystream,我正在尝试下载一个.jsonblob,该blob已存储在Azure存储中的容器中,使用Newtonsoft.json将其写入对象 为此,我打电话: (CloudBlockBlob) blob.DownloadToStream(stream); 但是,我想返回jsonobjectdoingjson(result) 这就是我尝试过的: using (var stream = new MemoryStream()) { blob.DownloadToStream(stream);

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

为此,我打电话:

(CloudBlockBlob) blob.DownloadToStream(stream);
但是,我想返回json
object
doing
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);
        }
    }
}
最后,my
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 stream=await blob.OpenReadAsync())
使用(var sr=新的StreamReader(stream))
使用(var jr=新的JsonTextReader(sr))
{
结果=JsonSerializer.CreateDefault()。反序列化(jr);
}

如果您不喜欢流媒体,想要一种简洁明了的方式:

var json = await blockBlob.DownloadTextAsync();

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

blob.DownloadToStream(流)之后,尝试将流的位置重置为
0
。成功了!谢谢如果您发布答案,我将接受。请始终指定示例中使用的库-添加使用;)您好,当我使用这段代码时,它工作正常,但输出是带有“{{”的json对象,我无法将其转换为Datatable!!有什么建议吗?@EmnaJaoua请提出一个新问题,而不是在评论中提出。请分享您能提供的所有详细信息。我为简短的评论道歉。我通过修改变量result=@“[”解决了我的问题+result+“]”。这样我就可以将其转换为dataTable。