NET问答: 如何在 dynamic 集合上使用 Linq ?
生活随笔
收集整理的這篇文章主要介紹了
NET问答: 如何在 dynamic 集合上使用 Linq ?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
咨詢區
user1618825:
有沒有一種方式可以將 dynamic 對象轉成 可過濾的 IEnumerable 類型對象?比如下面的代碼:
dynamic?data?=?JsonConvert.DeserializeObject(response.Content);然后用Linq去訪問
var?a?=?data.Where(p?=>?p.verified?==?true)回答區
Jon Skeet:
只要 data 是某一種 IEnumerable 類型,就可以像下面這樣用。
var?a?=?((IEnumerable)?data).Cast<dynamic>().Where(p?=>?p.verified);這里用 Cast<dynamic>() 的目的就是將 data 轉成 IEnumerable<dynamic>,好處在于 lambda 表達式 中的參數也是 動態類型。
user3407039:
如果可以的話,理想的方式是反序列化時指定好類型,這樣就可以避免后期再 Cast,比如下面的代碼:
dynamic?data?=?JsonConvert.DeserializeObject(response.Content);可以改造成
var?data?=?JsonConvert.DeserializeObject<IEnumerable<dynamic>>(response.Content);Varun Nair:
這里我提供一些思路可能對你有幫助,用 jsonString 作為 response.Content ,必要的話再在 response 中做迭代過濾。
下面的代碼通過 JValue.Parse 來返回 JToken,這里的 JToken 就是 IEnumerable.
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();點評區
其實我覺得既然都用了 JsonConvert ,直接用它內置的 JObject,JToken 來動態解析 json 即可,就如 Varun Nair 所述,簡單粗暴。
總結
以上是生活随笔為你收集整理的NET问答: 如何在 dynamic 集合上使用 Linq ?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【汇总】多种方法教你绕过 TPM 2.0
- 下一篇: C# 代码生成二维码方法及代码示例(QR