我正在尝试获取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”
有人知道我该怎么解决这个问题吗?
发布于 2012-10-31 03:34:47
问题是,LiveOperationResult.Result不一定一定是Dictionary<string, object>。然而,它被定义为IDictionary<string, object>。
请注意,您甚至不需要将Result属性转换为任何类型的字典;您应该能够使用dynamic变量直接访问要迭代的列表。
List<object> folders = (List<object>)result.data;发布于 2012-10-31 03:36:46
我认为您收到此消息是因为您已经使用以下代码声明了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,这是不可能的,这也是接收错误的原因。
谢谢,
我希望你觉得这很有帮助:)
https://stackoverflow.com/questions/13150863
复制相似问题