欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

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

时间:2021-11-21 10:50:53|栏目:.NET代码|点击:

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


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

上一篇:探讨Object转为String的几种简易形式详解

栏    目:.NET代码

下一篇:C#过滤DataTable中空数据和重复数据的示例代码

本文标题:C#使用dynamic类型访问JObject对象

本文地址:http://www.codeinn.net/misctech/184257.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有