skydrive System.Dynamic.DynamicObject

时间:2012-10-31 03:29:41

标签: c# windows-runtime onedrive

我正在尝试在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'

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

2 个答案:

答案 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这是不可能的,这就是您收到错误的原因。

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