咨询区

  • 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 ?相关推荐

  1. 如何在CentOS 8上使用firewalld设置防火墙

    介绍 (Introduction) firewalld is firewall management software available for many Linux distributions, ...

  2. fortran安装_如何在 CentOS 8 上安装 GCC

    本文最先发布在: 如何在 CentOS 8 上安装 GCC​www.itcoder.tech GNU 编译器集合是一系列用于语言开发的编译器和库的集合,包括: C, C++, Objective-C, ...

  3. redis 远程主机强迫关闭了一个现有的连接_如何在 Debian 10 上安装和配置 Redis 服务...

    Redis是一个开放源代码的内存中键值数据存储.它可以用作数据库,缓存和消息代理,并支持各种数据结构,例如字符串,哈希,列表,集合等.Redis通过Redis Sentinel提供高可用性,并通过Re ...

  4. 如何在Apple Watch上获取行车路线

    Kevin Parrish 凯文·帕里什 Gone are the days of using paper maps to navigate unknown roads and cities. Now ...

  5. centos7使用基础教程_如何在CentOS 7上使用Metricbeat收集基础结构指标

    centos7使用基础教程 The author selected the Computer History Museum to receive a donation as part of the W ...

  6. 如何在Windows 10上安装PowerShell 7

    Microsoft 微软 Microsoft announced PowerShell 7.0 on March 4, 2020. It's the latest major update to Po ...

  7. 如何在 Linux 服务器上更改分区方案?

    在 Linux 服务器上,分区方案对于数据存储和系统管理至关重要.当服务器的存储需求发生变化或者需要重新组织分区时,更改分区方案是一个常见的任务. 本文将详细介绍如何在 Linux 服务器上更改分区方 ...

  8. fomo规则_如何在WordPress网站上使用FOMO来增加转化次数

    fomo规则 You may have heard of FOMO and social proof notifications when reading about latest marketing ...

  9. 适合win7的python版本_windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2...

    windows下多个python版本共存,如何在Windows7系统上安装最新的64位Python3.6.2 1.官网下载python3.6.2 https://www.python.org/ftp/ ...

最新文章

  1. 使用idea新建maven工程的web项目的步骤
  2. 每天一道LeetCode-----计算给定序列中所有长度为k的滑动窗的最大值集合
  3. PHP面向对象(OOP)编程入门教程
  4. 《剑指offer》字符串的排列
  5. Adaboost算法原理分析和实例+代码(转载)
  6. PHP环境搭建:Windows 7下安装配置PHP+Apache+Mysql环境教程
  7. 常规单元测试和存根–测​​试技术4
  8. Android设计模式之——中介者模式
  9. php 封装的调试方法,关于php面向的特性之封装
  10. 使用JavaScript判断用户是否为手机设备
  11. java 二进制置位,重置
  12. nodejs+vue+elementui宠物医院管理系统php-java-python
  13. fataexception matlab,人工势场法路径规划(附MAtlab程序)
  14. Terms of Service - Screen Capture
  15. 优秀java程序员必须具备的技术技能
  16. 快手上的音乐计算机,快手本地音乐显示只能从电脑导入怎么办
  17. php 有下划线的方法,编码风格 - PHP类方法中领先的下划线有什么用?
  18. 天猫淘宝卡券包演进史
  19. 语音对话控制智能家居系统
  20. 【英语语法】 for

热门文章

  1. 视频图像传输学习笔记-基础小知识(一)
  2. [转载]智能科普:VR、AR、MR的区别
  3. sql-逻辑循环while if
  4. GChemPaint-绘制化学分子布局
  5. GraphAPI 1.0中新增加的Teams API
  6. zookeeper和etcd有状态服务部署
  7. C#如何用正则表达式截取https和带端口的域名
  8. linux批量分发必会面试题,通过邮件反馈结果。
  9. 无人职守安装的设计与部署
  10. 小米空调来了,意外的是还一起来了一个马桶盖