虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C#编程 > C#使用dynamic类型访问JObject对象

C#使用dynamic类型访问JObject对象
类别:C#编程   作者:码皇   来源:互联网   点击:

这篇文章主要为大家详细介绍了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}
    ");

运行一下程序,看一下输出结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • C#动态对象(dynamic)详解(实现方法和属性的动态)
  • C#中Dynamic和Dictionary性能比较
  • C#中dynamic关键字的正确用法(推荐)
  • 深入C# 4.0 新特性dynamic、可选参数、命名参数的详细介绍
  • C# Dynamic关键字之:dynamic为什么比反射快的详解
  • C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的应用(下)
  • C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的应用(上)
  • C# Dynamic关键字之:调用属性、方法、字段的实现方法
  • C# Dynamic关键字之:解析dynamic就是Object
  • C# dynamic关键字的使用方法
相关热词搜索: C dynamic JObject