SkyDrive的System.Dynamic.DynamicObject(skydrive Sys

2019-07-03 11:38发布

我试图让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”

没有人有任何想法,我该怎么办解决此问题得到什么?

Answer 1:

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

你要知道,你不会出现,甚至需要将投Result属性以任何形式的字典; 你应该能够使用dynamic变量来直接访问你想要遍历列表。

List<object> folders = (List<object>)result.data;


Answer 2:

我认为你收到这是因为你已经宣布result用下面的代码

dynamic result = operationResult.Result;

这将宣布result作为新System.Dynamic.DynamicObject ,这样,当我们说

Dictionary<string, object> folderData = (Dictionary<string, object>)result;

您正试图转换result型的System.Dynamic.DynamicObjectSystem.Collections.Generic.Dictionary这是不可能的,这就是为什么您会收到错误。

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



文章来源: skydrive System.Dynamic.DynamicObject