C# 使用dynamic类型来访问JObject对象
dynamic是C#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便。
使用Json.Net可以把一个Json字符串转换成一个JObject对象,如果有已知强类型,如果有已知对应的强类型,可以直接转成对应的类型。但如果没有,要访问Json里面对应的数据的时候,就显得比较麻烦。我们可以借助DynamicObject来访问对应的属性。
DynamicObject
我们要创建一个动态类,用于访问JObject,代码如下:
public class JObjectAccessor : DynamicObject
{
JToken obj; public JObjectAccessor(JToken obj)
{
this.obj = obj;
} public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = null; if (obj == null) return false; var val = obj[binder.Name]; if (val == null) return false; result = Populate(val); return true;
} private object Populate(JToken token)
{
var jval = token as JValue;
if (jval != null)
{
return jval.Value;
}
else if (token.Type == JTokenType.Array)
{
var objectAccessors = new List<object>();
foreach (var item in token as JArray)
{
objectAccessors.Add(Populate(item));
}
return objectAccessors;
}
else
{
return new JObjectAccessor(token);
}
}
}
接下来就可以开始使用它了:
string json = @"{'name': 'Jeremy Dorn','location': {'city': 'San Francisco','state': 'CA'},'pets': [{'type': 'dog','name': 'Walter'}]}";
JObject jobj = JObject.Parse(json);
dynamic obj = new JObjectAccessor(jobj);
Console.WriteLine($"{obj.name}: {obj.location.city} {obj.location.state}");
Console.WriteLine($"{obj.pets[0].type}: {obj.pets[0].name}");
运行一下程序,看一下输出结果:

原文地址:http://www.zkea.net/codesnippet/detail/post-99.html
C# 使用dynamic类型来访问JObject对象的更多相关文章
- dynamic 类型不能访问属性
x //解决方案ProjectTest.项目A里面public object r(){ ,name = "zf"}; } //解决方案ProjectTest.项目B里面 publi ...
- dynamic获取类型可变的json对象
使用dynamic获取类型可变的json对象 Dictionary<string, object> dict = new Dictionary<string, object>( ...
- 匿名类型 使用泛型T linq返回dynamic类型的匿名实体 如何把匿名类型.GetType()返回的对象传进泛型里面 EF实体查询出的数据List<T>转DataTable出现【DataSet 不支持 System.Nullable<>】的问题
[100分]紧急求助:LinQ下使用IQueryable<T>如何将返回类型<T>使用匿名类型 问题描述如下:我有一个方法如下:public IQueryable Dissen ...
- C# dynamic类型序列化和反序列化之Newtonsoft.Json,动态解析远端返回的jSON数据
一.说明 1.Newtonsoft.Json 中的Linq To Json中提供了方便的json数据查询.修改等操作. 例如:JObject,JArray 2.在JObject.FromObject( ...
- C#编程(七十)----------dynamic类型
原文链接 : http://blog.csdn.net/shanyongxu/article/details/47296033 dynamic类型 C#新增了dynamic关键字,正是因为这一个小小的 ...
- 使用dynamic类型来优化反射
什么是dynamic类型?微软给出的官方文档中这样解释:在通过 dynamic 类型实现的操作中,该类型的作用是绕过编译时类型检查. 改为在运行时解析这些操作. dynamic 类型简化了对 COM ...
- C#4.0新增功能01 动态绑定 (dynamic 类型)
连载目录 [已更新最新开发文章,点击查看详细] C# 4 引入了一个新类型 dynamic. 该类型是一种静态类型,但类型为 dynamic 的对象会跳过静态类型检查. 大多数情况下,该对象就像 ...
- C# dynamic类型序列化和反序列化之Newtonsoft.Json
原文:C# dynamic类型序列化和反序列化之Newtonsoft.Json 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011127019/ ...
- 使用dynamic类型改进反射
首先还是声明一下,使用场景: 1.如果编译时函数名称确定,对象类型运行时确定,那么运用dynamic是一个好主意.2.如果编译时函数名称确定,对象类型在编译时也确定,那就既不需要反射也不需要dynam ...
随机推荐
- Rhythmk 一步一步学 JAVA (21) JAVA 多线程
1.JAVA多线程简单示例 1.1 .Thread 集成接口 Runnable 1.2 .线程状态,可以通过 Thread.getState()获取线程状态: New (新创建) Runnable ...
- Nginx 实现 IP+项目名 访问
参考: https://blog.csdn.net/csdn1152789046/article/details/51362735 修改前 项目放在Tomcat的webapps/ROOT/ 目录下面 ...
- AnyConnect removes "Connections" tab from IE Settings solution
I have an ASA 5510 that we use for SSL VPN Client access. The ASA distributes the AnyConnect (v2.4. ...
- 迷你MVVM框架 avalonjs 学习教程8、属性操作
属性操作是DOM操作很大的一块,它包括类名操作,表单元素的value属性操作,元素固有属性的管理,元素自定义属性的管理,某些元素的一些布尔属性的操作.大多数情况下,元素属性的值是字符串类型,我们称之为 ...
- Thymeleaf 表达式工具类
Thymeleaf默认提供了丰富的表达式工具类,这里列举一些常用的工具类. Objects工具类 1 2 3 4 5 6 7 8 /* * 当obj不为空时,返回obj,否则返回default默认值 ...
- js中获取页面元素节点的几种方式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- PLSQL result set exceeds the maximum size(100M)if necessary,you can explicitly confinue this query
在PL SQL 里执行一条语句,当反正信息达到2w条时,弹出如下内容:result set exceeds the maximum size(100M)if necessary,you can exp ...
- 切线空间(Tangent Space)
http://download.autodesk.com/global/docs/maya2012/zh-cn/index.html?url=files/Polygons_nodes_Tangent_ ...
- 单源最短路:Dijkstra算法 及 关于负权的讨论
描述: 对于图(有向无向都适用),求某一点到其他任一点的最短路径(不能有负权边). 操作: 1. 初始化: 一个节点大小的数组dist[n] 源点的距离初始化为0,与源点直接相连的初始化为其权重,其他 ...
- stl源码分析de练习
// StlTest1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <vector> #include & ...