CloudBlockBlob.DownloadTextAsync返回无效文本

时间:2016-10-04 21:19:39

标签: c# json azure azure-storage-blobs

我使用azure blob存储来存储JSON文件,在我的代码中我使用C#API下载它。

当我下载文本文件的内容并尝试使用JsonConvert反序列化时,我收到一个错误(Visual Studio JSON可视化工具也显示文本错误)。但是,如果我复制文本并粘贴到JSONLint.com,它看起来很好。此外,如果我从Azure存储手动下载文件并在代码中读取该文件,它反序列化就好了。我在使用C#API下载时获取无效数据的任何想法?

var storageAccount = CloudStorageAccount.Parse(connectionString);
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blob = container.GetBlockBlobReference(folderAndFileName);
var text =  await blob.DownloadTextAsync();
var obj = JsonConvert.DeserializeObject(text);
// Exception: "Unexpected character encountered while parsing value: . Path '', line 0, position 0."

注意:我通过Powershell上传文件:

$blobProperties = @{"ContentType" = "application/json"};
Set-AzureStorageBlobContent -Container $containerName -File  $LocalFilePath -Blob $RemoteBlobName -BlobType "Block" -Properties $blobProperties

2 个答案:

答案 0 :(得分:2)

经过进一步调查,我发现下载的文件在开始时有一个额外的Unicode格式化字符。我添加了以下代码,只是检查开头的特殊字符并删除它们......

var startIndex = 0;
while (char.GetUnicodeCategory(text, startIndex) == UnicodeCategory.Format)
{
     startIndex++;
}
text = text.Substring(startIndex, text.Length - startIndex);

答案 1 :(得分:1)

我已经测试了你的代码。看来这个问题与您的代码无关。以下是我的代码测试结果:

enter image description here

<强>实体:

{
  "name": "jambor",
  "address": "us"
}

Json文件:

var obj = JsonConvert.DeserializeObject(text);

正如Gaurav Mantri所说,我建议你查看storage library。我的Azure存储库的版本是7.2.1。还请在代码search: (\d\d) replace: 00\1 处设置断点。然后检查文本的值。它可以帮助您找出问题。