zoukankan      html  css  js  c++  java
  • 使用dynamic获取类型可变的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记录下来就好了,干嘛转来转去呢……全剧终

  • 相关阅读:
    TensorFlow 一步一步实现卷积神经网络
    TensorFlow 卷积神经网络手写数字识别数据集介绍
    深度学习之激活函数
    使用Keras进行深度学习:(二)CNN讲解及实践
    计算智能(CI)之粒子群优化算法(PSO)(一)
    C# SqlBulkCopy
    Oracle 连接数据库
    C# DataTable转换为Html 用Html的方式预览DataTable的数据
    C# 中文判断
    C# Excel To DataTable
  • 原文地址:https://www.cnblogs.com/billsquall/p/4895324.html
Copyright © 2011-2022 走看看