skydrive System.Dynamic.DynamicObject

Sto cercando di ottenere un elenco di tutte le cartelle per un utente che ha effettuato l’accesso su SkyDrive.

LiveOperationResult operationResult = await client.GetAsync("me/skydrive/files"); dynamic result = operationResult.Result; 

Mi piacerebbe essere in grado di fare qualcosa del genere:

 Dictionary folderData = (Dictionary)result; List folders = (List)folderData["data"]; foreach (object item in folders) { Dictionary folder = (Dictionary)item; if (folder["name"].ToString() == "Folder Name") { showToastMessage(folder["id"].ToString()); return; } } 

Tuttavia, su questa linea:

 Dictionary folderData = (Dictionary)result; 

Sto ricevendo un errore:

Imansible convertire il tipo “System.Dynamic.DynamicObject” in “System.Collections.Generic.Dictionary”

Qualcuno ha qualche idea su come posso aggirare questo problema?

Il problema è che LiveOperationResult.Result non è necessariamente garantito come Dictionary . È tuttavia definito come un IDictionary .

Intendiamoci, non sembra nemmeno necessario lanciare la proprietà Result su un dizionario di qualsiasi tipo; dovresti essere in grado di utilizzare la variabile dynamic per accedere direttamente all’elenco che desideri ripetere.

 List folders = (List)result.data; 

Penso che tu riceva questo perché hai dichiarato il result usando il seguente codice

 dynamic result = operationResult.Result; 

questo dichiarerà il result come un nuovo System.Dynamic.DynamicObject modo che, quando diciamo

 Dictionary folderData = (Dictionary)result; 

Si sta tentando di convertire il result del tipo System.Dynamic.DynamicObject in System.Collections.Generic.Dictionary che non è ansible ed è per questo che si riceve l’errore.

Grazie,
Spero che trovi utile 🙂