2016-10-04 2 views
1

Ich benutze azure Blob Speicher um eine JSON Datei zu speichern und in meinem Code lade ich sie mit den C# APIs herunter.CloudBlockBlob.DownloadTextAsync gibt ungültigen Text zurück

Wenn ich den Inhalt der Textdatei herunterlade und versuche, ihn mit JsonConvert zu deserialisieren, erhalte ich einen Fehler (der Visual Studio JSON-Visualizer zeigt auch einen Fehler für den Text an). Wenn ich jedoch den Text kopiere und in JSONLint.com einfüge, scheint es in Ordnung zu sein. Wenn ich die Datei manuell von Azure Storage herunterlade und die Datei im Code lese, wird die Deserialisierung problemlos durchgeführt. Irgendwelche Ideen, warum ich ungültige Daten bekomme, wenn ich die C# APIs herunterlade?

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." 

Hinweis: Ich bin das Hochladen der Datei über Powershell:

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

Ihr Code sieht für mich OK aus. Können Sie die Version der verwendeten Speicherclient-Bibliothek angeben? Wird es Ihnen auch möglich sein, die von Ihnen hochgeladene JSON-Datei freizugeben? Ich möchte es mit dieser Datei versuchen. –

Antwort

1

ich Ihren Code getestet haben. Es scheint, dass es sich bei diesem Problem nicht um Ihren Code handelt. Im Folgenden ist mein Testergebnis mit Ihrem Code:

enter image description here

Entity:

public class People 
    { 
     [JsonProperty(PropertyName ="name")] 
     public string Name { get; set; } 
     [JsonProperty(PropertyName = "address")] 
     public string Address { get; set; } 
    } 

Json Datei:

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

Wie Gaurav Mantri sagte, würde ich vorschlagen, dass Sie Ihre storage library überprüfen. Die Version meiner Azure-Speicherbibliothek ist 7.2.1. Bitte setzen Sie auch den Breakpoint unter dem Code var obj = JsonConvert.DeserializeObject(text);. Überprüfen Sie dann den Wert des Textes. Es kann Ihnen helfen, das Problem herauszufinden.

1

Nach weiteren Untersuchungen stellte ich fest, dass die heruntergeladene Datei am Anfang ein zusätzliches Unicode-Formatierungszeichen hat. Ich habe den folgenden Code hinzugefügt, um am Anfang nur nach Sonderzeichen zu suchen und sie zu entfernen ...

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