使用dynamic获取类型可变的json对象
2015-10-20 16:58
441 查看
标题可能有点含糊不清
我这个例子的来源是,对方会返回给我json,不过成功的json与失败的json是不同的对象
我想用一个方法获取到这个对象的所有属性并打印到log中
因为是动态变化的,所以第一个想到的就是用dynamic
下面是dynamic例子
这样是可以取到属性的,但是(总有个但是)
这个反序列回来的对象,我们是可以获取到banme属性的值asd的,但是当我们去s里查看属性的时候,却没有banme这个属性,仔细看了一下dobj的属性是 dobj.GetType() {Newtonsoft.Json.Linq.JObject} dynamic {System.RuntimeType}
只是我们用了dynamic动态获取到了那个banme属性的值
暂时还没找到获取动态属性的方法
所以我采用的下一种方法
微软的这个json序列化工具,反序列化回来一个键值对的对象,那么只要遍历keys就可以获取的他的属性啦
这样,我就可以把完全未知的对象属性都记录到日志里了。
到此还不算结束,其实这种方法不好,如果属性也是一个类型,就很难进一步动态获取了,还是直接转成对象,通过对象属性来获取来的实惠。
到此还不算结束,后来我想了一下,既然是记录日志,直接把json记录下来就好了,干嘛转来转去呢……全剧终
我这个例子的来源是,对方会返回给我json,不过成功的json与失败的json是不同的对象
我想用一个方法获取到这个对象的所有属性并打印到log中
因为是动态变化的,所以第一个想到的就是用dynamic
下面是dynamic例子
List<dynamic> lst = new List<dynamic>() { new { aa = 1, bb = "2" } }; Type type = lst[0].GetType(); var ps = type.GetProperties();
这样是可以取到属性的,但是(总有个但是)
string json = "{\"banme\":\"asd\"}"; dynamic dobj = JsonConvert.DeserializeObject(json, typeof (object)) as dynamic; var s = dobj.GetType().GetProperties(); var i = dobj.banme;
这个反序列回来的对象,我们是可以获取到banme属性的值asd的,但是当我们去s里查看属性的时候,却没有banme这个属性,仔细看了一下dobj的属性是 dobj.GetType() {Newtonsoft.Json.Linq.JObject} dynamic {System.RuntimeType}
只是我们用了dynamic动态获取到了那个banme属性的值
暂时还没找到获取动态属性的方法
所以我采用的下一种方法
JavaScriptSerializer siSerializer=new JavaScriptSerializer(); dynamic dobj2 = siSerializer.Deserialize<dynamic>(json); foreach (var ss in dobj2.Keys) { var ii = dobj2[ss]; }
微软的这个json序列化工具,反序列化回来一个键值对的对象,那么只要遍历keys就可以获取的他的属性啦
这样,我就可以把完全未知的对象属性都记录到日志里了。
到此还不算结束,其实这种方法不好,如果属性也是一个类型,就很难进一步动态获取了,还是直接转成对象,通过对象属性来获取来的实惠。
到此还不算结束,后来我想了一下,既然是记录日志,直接把json记录下来就好了,干嘛转来转去呢……全剧终
相关文章推荐
- jsf中enetity类没有定义或者识别的报错
- js简单实现文件下载
- JS通过prototype实现继承的简单示例:
- JSON 教程
- 【Miaov】JS1-属性操作
- iOS开发——JS网页交互——javaScript
- javascript权威指南 严格模式与非严格模式的一些区别
- SeaJS快速入门,让js代码模块化 - 2011-09-09修订,新添参考资料
- 商务通通过JS获取sid、cid等参数
- jsp的内置对象
- js 页面数字倒计时
- 关于 JavaScript 数据类型判断
- [入门]javascript正则表达式
- LitJson使用中需要注意的一些问题(转)
- JSF与JSP的区别
- js中的replace
- javascript模板
- js中的||{}
- js 函数function用法
- JSF生命周期