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 ?相关推荐
- 如何在CentOS 8上使用firewalld设置防火墙
介绍 (Introduction) firewalld is firewall management software available for many Linux distributions, ...
- fortran安装_如何在 CentOS 8 上安装 GCC
本文最先发布在: 如何在 CentOS 8 上安装 GCCwww.itcoder.tech GNU 编译器集合是一系列用于语言开发的编译器和库的集合,包括: C, C++, Objective-C, ...
- redis 远程主机强迫关闭了一个现有的连接_如何在 Debian 10 上安装和配置 Redis 服务...
Redis是一个开放源代码的内存中键值数据存储.它可以用作数据库,缓存和消息代理,并支持各种数据结构,例如字符串,哈希,列表,集合等.Redis通过Redis Sentinel提供高可用性,并通过Re ...
- 如何在Apple Watch上获取行车路线
Kevin Parrish 凯文·帕里什 Gone are the days of using paper maps to navigate unknown roads and cities. Now ...
- centos7使用基础教程_如何在CentOS 7上使用Metricbeat收集基础结构指标
centos7使用基础教程 The author selected the Computer History Museum to receive a donation as part of the W ...
- 如何在Windows 10上安装PowerShell 7
Microsoft 微软 Microsoft announced PowerShell 7.0 on March 4, 2020. It's the latest major update to Po ...
- 如何在 Linux 服务器上更改分区方案?
在 Linux 服务器上,分区方案对于数据存储和系统管理至关重要.当服务器的存储需求发生变化或者需要重新组织分区时,更改分区方案是一个常见的任务. 本文将详细介绍如何在 Linux 服务器上更改分区方 ...
- fomo规则_如何在WordPress网站上使用FOMO来增加转化次数
fomo规则 You may have heard of FOMO and social proof notifications when reading about latest marketing ...
- 适合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/ ...
最新文章
- 使用idea新建maven工程的web项目的步骤
- 每天一道LeetCode-----计算给定序列中所有长度为k的滑动窗的最大值集合
- PHP面向对象(OOP)编程入门教程
- 《剑指offer》字符串的排列
- Adaboost算法原理分析和实例+代码(转载)
- PHP环境搭建:Windows 7下安装配置PHP+Apache+Mysql环境教程
- 常规单元测试和存根–测​​试技术4
- Android设计模式之——中介者模式
- php 封装的调试方法,关于php面向的特性之封装
- 使用JavaScript判断用户是否为手机设备
- java 二进制置位,重置
- nodejs+vue+elementui宠物医院管理系统php-java-python
- fataexception matlab,人工势场法路径规划(附MAtlab程序)
- Terms of Service - Screen Capture
- 优秀java程序员必须具备的技术技能
- 快手上的音乐计算机,快手本地音乐显示只能从电脑导入怎么办
- php 有下划线的方法,编码风格 - PHP类方法中领先的下划线有什么用?
- 天猫淘宝卡券包演进史
- 语音对话控制智能家居系统
- 【英语语法】 for