首页 > 编程 > C# > 正文

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

2020-01-24 00:18:49
字体:
来源:转载
供稿:网友

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

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表