天空驱动器System.Dynamic.DynamicObject [英] skydrive System.Dynamic.DynamicObject

查看:118
本文介绍了天空驱动器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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆