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);
但是,我想返回jsonobject
doingjson(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);
}
}
}
最后,myjsonTextReader
变量为空,对象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。