71

dynamicオブジェクトをIEnumerableType に変換して、プロパティでコレクションをフィルタリングする方法はありますか。

dynamic data = JsonConvert.DeserializeObject(response.Content);

このようなものにアクセスする必要があります

var a = data.Where(p => p.verified == true)

何か案は?

4

4 に答える 4

124

dataが何らかの種類である限りIEnumerable、次を使用できます。

var a = ((IEnumerable) data).Cast<dynamic>()
                            .Where(p => p.verified);

は、ラムダ式へのパラメーターの型も になるように になりCast<dynamic>()ます。IEnumerable<dynamic>dynamic

于 2013-09-11T07:22:35.363 に答える
53

キャストしてみるIEnumerable<dynamic>

((IEnumerable<dynamic>)data).Where(d => d.Id == 1);

このアプローチは、他のアプローチよりも 4 倍高速です。

幸運を

于 2013-09-11T07:22:03.170 に答える
0

これが役立つ場合があります。jsonString を response.Content に置き換え、応答の内容に基づいて必要に応じてネストされたループを使用します。

以下のコードでは、JValue.Parse は IEnumerable である JToken を返します。

        string jsonString = "[{\"Question\":{\"QuestionId\":49,\"QuestionText\":\"Whats your name?\",\"Answer\":\"xyz\"}},{\"Question\":{\"QuestionId\":51,\"QuestionText\":\"Are you smart?\",\"Answer\":\"Yes\"}}]";
        dynamic myObject = JValue.Parse(jsonString);
        foreach (dynamic questions in myObject)
        {
            Console.WriteLine(questions.Question.QuestionId + "." + questions.Question.QuestionText.ToString());
            Console.WriteLine("Ans. " +questions.Question.Answer);
            Console.WriteLine();
        }
        Console.Read();
于 2021-01-19T18:18:31.110 に答える