C#使用dynamic类型访问JObject对象
程序员文章站
2023-12-18 18:44:04
dynamic是c#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便。
使用json.net可以把一个json字符串转换成一个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}");
运行一下程序,看一下输出结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读