C#使用dynamic类型访问JObject对象
作者:ZKEASOFT 时间:2022-03-01 13:05:28
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
0
投稿
猜你喜欢
一次Jvm old过高的排查过程实战记录
2023-05-07 23:33:49
Java实战个人博客系统的实现流程
2023-04-12 02:32:44
SpringBoot 整合 Elasticsearch 实现海量级数据搜索功能
2021-09-23 02:38:51
java中Statement 与 PreparedStatement接口之间的关系和区别
2023-11-25 03:11:11
C# WinForm调用Shell_NotifyIcon的示例代码
2021-07-17 16:04:41
java 对称加密算法实现详解
2021-07-29 22:34:57
OpenGL画bezier曲线
2021-11-30 19:09:06
分布式医疗挂号系统SpringCache与Redis为数据字典添加缓存
2023-06-28 02:26:55
如何把本地jar包导入maven并pom添加依赖
2021-12-31 04:11:28
Java基于虹软实现人脸识别、人脸比对、活性检测等
2023-02-18 15:29:09
如何使用C#从word文档中提取图片
2022-04-17 06:58:09
c# 实现轮询算法实例代码
2023-01-30 03:48:51
Java基于JavaMail实现向QQ邮箱发送邮件
2021-12-06 13:25:08
手把手教你SpringBoot过滤器N种注册方式
2023-08-08 08:28:45
mybatis多表查询的实现(xml方式)
2021-07-11 01:21:38
java使用回溯法求解数独示例
2023-08-17 14:39:10
java简单工厂模式实例及讲解
2021-09-19 14:08:39
WebView设置WebViewClient的方法
2023-09-01 05:34:58
详解Java递归实现树形结构的两种方式
2023-02-18 07:24:47
使用BufferedReader读取本地文件的操作
2021-10-15 03:22:47