如何使用 C# 将内容从 Azure Blob 解析为字典<字符串、动态>?



我试图从Azure中的blob获取内容,这是键值对并将它们传输到Dictionary<String,>。但是它失败了。我的代码如下:

static async Task Main()
{   
BlobServiceClient blobServiceClient = new BlobServiceClient("#");
BlobContainerClient containerClient =  blobServiceClient.GetBlobContainerClient("#");
var blobClient = containerClient.GetBlobClient("#");  
var response = blobClient.DownloadContent();

var data = response.Value.Content;
var blobContents = Encoding.UTF8.GetString(data);
var options = new JsonSerializerOptions { WriteIndented = true };
var jsonString = System.Text.Json.JsonSerializer.Serialize(blobContents, options);
Dictionary<string, dynamic>? values = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(jsonString);
}

但是它显示:

unhandled exception. Newtonsoft.Json.JsonSerializationException: Error converting value "{"key":"value","...} to type 'System.Collections.Generic.Dictionary`2[System.String,System.Object]'. Path '', line 1, position 104484.

我想知道如何修理它。谢谢你!

private async Task<string> GetBlob(BlobClient blobClient)
{
string file = string.Empty;
MemoryStream fileStream = new MemoryStream();
try
{
using (var stream = new MemoryStream())
{
await blobClient.DownloadToAsync(stream).ConfigureAwait(false);
if (stream != null)
{
stream.WriteTo(fileStream);
fileStream.Position = 0;
StreamReader reader = new StreamReader(fileStream);
file = reader.ReadToEnd();
}
}
return file;
}
catch (Exception)
{
return string.Empty;
}
}
}

要修复这个错误,只需删除以下两行代码:

var options = new JsonSerializerOptions { WriteIndented = true };
var jsonString = System.Text.Json.JsonSerializer.Serialize(blobContents, options);

并替换以下代码行:

Dictionary<string, dynamic>? values = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(jsonString);

Dictionary<string, dynamic>? values = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(blobContents);
所以你的代码应该是这样的:
static async Task Main()
{   
BlobServiceClient blobServiceClient = new BlobServiceClient("#");
BlobContainerClient containerClient =  blobServiceClient.GetBlobContainerClient("#");
var blobClient = containerClient.GetBlobClient("#");  
var response = blobClient.DownloadContent();

var data = response.Value.Content;
var blobContents = Encoding.UTF8.GetString(data);

Dictionary<string, dynamic>? values = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(blobContents);
}

最新更新