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これはnew として宣言される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 に答える