首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >skydrive System.Dynamic.DynamicObject

skydrive System.Dynamic.DynamicObject
EN

Stack Overflow用户
提问于 2012-10-31 03:29:40
回答 2查看 479关注 0票数 3

我正在尝试获取SkyDrive上已登录用户的所有文件夹的列表。

代码语言:javascript
复制
LiveOperationResult operationResult = await client.GetAsync("me/skydrive/files");
dynamic result = operationResult.Result;

我希望能做这样的事情:

代码语言:javascript
复制
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;
    }
}

然而,在这一行上:

代码语言:javascript
复制
Dictionary<string, object> folderData = (Dictionary<string, object>)result;

我收到一个错误:

无法将“System.Dynamic.DynamicObject”转换为“System.Collections.Generic.Dictionary”

有人知道我该怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-31 03:34:47

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

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

代码语言:javascript
复制
List<object> folders = (List<object>)result.data;
票数 3
EN

Stack Overflow用户

发布于 2012-10-31 03:36:46

我认为您收到此消息是因为您已经使用以下代码声明了result

代码语言:javascript
复制
dynamic result = operationResult.Result;

这将声明result为新的System.Dynamic.DynamicObject,因此,当我们说

代码语言:javascript
复制
Dictionary<string, object> folderData = (Dictionary<string, object>)result;

您正在尝试将result类型为System.Dynamic.DynamicObject转换为System.Collections.Generic.Dictionary,这是不可能的,这也是接收错误的原因。

谢谢,

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13150863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档