天空驱动器System.Dynamic.DynamicObject [英] skydrive System.Dynamic.DynamicObject
问题描述
我正在尝试获取SkyDrive上已登录用户的所有文件夹的列表.
I'm trying to get a listing of all the folders for a signed in user on SkyDrive.
LiveOperationResult operationResult = await client.GetAsync("me/skydrive/files");
dynamic result = operationResult.Result;
我希望能够做这样的事情:
I'd like to be able to do something like this:
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'
Cannot convert type 'System.Dynamic.DynamicObject' to 'System.Collections.Generic.Dictionary'
有人知道我该如何解决这个问题?
Does anyone have any idea how I can do get around this issue?
推荐答案
问题是 LiveOperationResult.Result
不一定保证是Dictionary<string, object>
.但是,将其定义为IDictionary<string, object>
.
The problem is that LiveOperationResult.Result
isn't necessarily guaranteed to be a Dictionary<string, object>
. It is however defined as an IDictionary<string, object>
.
请介意,您似乎甚至不需要将Result
属性强制转换为任何类型的字典;您应该可以使用dynamic
变量直接访问要迭代的列表.
Mind you, you don't appear to even need to cast the Result
property to a dictionary of any sort; you should be able to use the dynamic
variable to directly access the list you want to iterate.
List<object> folders = (List<object>)result.data;
这篇关于天空驱动器System.Dynamic.DynamicObject的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!