当前位置: 移动技术网 > IT编程>开发语言>c# > C#使用dynamic类型访问JObject对象

C#使用dynamic类型访问JObject对象

2019年07月18日  | 移动技术网IT编程  | 我要评论

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}");


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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网