我正在尝试在SkyDrive上获取已登录用户的所有文件夹列表。
LiveOperationResult operationResult = await client.GetAsync("me/skydrive/files");
dynamic result = operationResult.Result;
我希望能够做到这样的事情:
Dictionary<string, object> folderData = (Dictionary<string, object>)result;
List<object> folders = (List<object>)folderData["data"];
foreach (object item in folders)
{
Dictionary<string, object> folder = (Dictionary<string, object>)item;
if (folder["name"].ToString() == "Folder Name")
{
showToastMessage(folder["id"].ToString());
return;
}
}
然而,在这一行:
Dictionary<string, object> folderData = (Dictionary<string, object>)result;
我收到了一个错误:
无法将类型'System.Dynamic.DynamicObject'转换为 'System.Collections.Generic.Dictionary'
有谁知道如何解决这个问题?
答案 0 :(得分:3)
问题是LiveOperationResult.Result
不一定保证是Dictionary<string, object>
。然而,它被定义为IDictionary<string, object>
。
请注意,您甚至不需要将Result
属性转换为任何类型的字典;您应该能够使用dynamic
变量直接访问要迭代的列表。
List<object> folders = (List<object>)result.data;
答案 1 :(得分:1)
我认为您收到此内容是因为您已使用以下代码声明result
dynamic result = operationResult.Result;
这会将result
声明为新System.Dynamic.DynamicObject
,以便在我们说
Dictionary<string, object> folderData = (Dictionary<string, object>)result;
您正在尝试将result
类型的System.Dynamic.DynamicObject
转换为System.Collections.Generic.Dictionary
这是不可能的,这就是您收到错误的原因。
谢谢, 我希望你觉得这很有帮助:)