3

我正在尝试获取 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”

有谁知道我该如何解决这个问题?

4

2 回答 2

3

问题是LiveOperationResult.Result不一定保证是Dictionary<string, object>. 然而,它被定义为一个IDictionary<string, object>.

请注意,您似乎甚至不需要将该Result属性转换为任何类型的字典;您应该能够使用该dynamic变量直接访问要迭代的列表。

List<object> folders = (List<object>)result.data;
于 2012-10-31T03:34:47.797 回答
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

谢谢,
我希望你觉得这有帮助:)

于 2012-10-31T03:36:46.047 回答