我使用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
答案 0 :(得分:2)
经过进一步调查,我发现下载的文件在开始时有一个额外的Unicode格式化字符。我添加了以下代码,只是检查开头的特殊字符并删除它们......
var startIndex = 0;
while (char.GetUnicodeCategory(text, startIndex) == UnicodeCategory.Format)
{
startIndex++;
}
text = text.Substring(startIndex, text.Length - startIndex);
答案 1 :(得分:1)
我已经测试了你的代码。看来这个问题与您的代码无关。以下是我的代码测试结果:
<强>实体:强>
{
"name": "jambor",
"address": "us"
}
Json文件:
var obj = JsonConvert.DeserializeObject(text);
正如Gaurav Mantri所说,我建议你查看storage library。我的Azure存储库的版本是7.2.1。还请在代码search: (\d\d)
replace: 00\1
处设置断点。然后检查文本的值。它可以帮助您找出问题。