上来先吐槽一波,近一段时间公司为搞跨平台的客户端,我的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的属性 不序列化
标签:null,c#,序列化,param,dic,添加,客户端,property,属性 From: https://www.cnblogs.com/wuyaxiansheng/p/16846627.html