hello world

c# 动态添加属性字段

  近一段时间公司为搞跨平台的客户端,我的wpf客户端逐渐被放弃,我的工作也越来越少,新的客户端采用qt来做,也有可能是qt开发进度太慢,项目比较紧,于是想让我的客户端兼容 新的平台服务端,

新平台的服务端是基于老平台服务端开发的,功能基本一致,只是协议格式和具体字段有些改变,于是我原有的 要兼容现有的,唉。。。。。

  需要增加字段,由于我请求参数 不是继承的,难道我只能一个一个的去加?还好发送的参数是用json组成的,只需要我增加些字段就好,于是我有了个垃圾的想法,就是再json发送之前,把它拆开重新拼接一下新字段,后来

我觉得这种方式看似简单,实际可扩展性不强,于是我就想到了 使用匿名类 或者 动态类 来动态添加方法 最后我找到了 代码如下

 

 public static string GetNewJson(object o, Dictionary<string, object> param)
        {
            try
            {
                System.Type t = o.GetType();
                dynamic obj = new System.Dynamic.ExpandoObject();
                var dic = obj as IDictionary<string, object>;
                foreach (PropertyInfo property in t.GetProperties())
                {
                    IEnumerable<Attribute> att = property.GetCustomAttributes(typeof(JsonIgnoreAttribute));
                    if (att.Count() > 0)
                    {
                        continue;
                    }
                    object val = property.GetValue(o, null);
                    if (val == null) continue;
                    dic[property.Name] = val;
                }

                if (param != null && param.Count > 0)
                {
                    foreach (KeyValuePair<string, object> pair in param)
                    {
                        dic[pair.Key] = pair.Value;
                    }
                }

                return JsonHelp.ToJson(obj);
            }
            catch (Exception e)
            {
                LogHelp.Error(e);
                return "";
            }
        }

其中我判断了 序列化json的时候 不序列化的 属性的特性 JsonIgnore

还有字段值是null的属性 不序列化

posted @ 2022-11-01 09:19  我是刹那、  阅读(1634)  评论(0编辑  收藏  举报