首页 > 编程语言 >c# 动态添加属性字段

c# 动态添加属性字段

时间:2022-11-01 09:35:21浏览次数:48  
标签:null c# 序列化 param dic 添加 客户端 property 属性

  上来先吐槽一波,近一段时间公司为搞跨平台的客户端,我的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

相关文章

  • win10卸载office提示:安装程序包的语言不受系统支持 的解决方法
    win10卸载office提示:安装程序包的语言不受系统支持的解决方法安装程序包的语言不受系统支持 表明有office的注册表未卸载干净。下载该软件运行可卸载:通过百度网盘分......
  • OSI七层与TCP/IP协议
    一、什么是网络①什么是网络      网络:计算机网络是一组计算机或网络设备通过有形的线缆或无形的媒介如无线,连接起来,按照一定的规则,进行通信的集合。通信,......
  • Vue.$nextTick的原理是什么-vue面试进阶
    原理性的东西就会文字较多,请耐下心来,细细品味Vue中DOM更新机制当你气势汹汹地使用Vue大展宏图的时候,突然发现,咦,我明明对这个数据进行更改了,但是当我获取它的时候怎么是上......
  • CSP-S 2022 T4 题解
    简述题意给一颗\(n\)个点的树,每个点有点权\(v_i\)。有\(q\)次询问,每次给出\((u,v)\),从\(u\)开始,每步只能走不超过\(k\)条边,走一步的代价是终点的点权,\(v_u\)也......
  • gitlab-ce搭建和数据迁移
    2022年11月1日08:26:03centos7国内地址:注意对应的系统版本,下一个最新版本https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/因为数据导入导出使用的是gitlab......
  • postcss.config.js
    //https://github.com/michael-ciniawsky/postcss-load-configmodule.exports={'plugins':{//toedittargetbrowsers:use"browserslist"fieldinpack......
  • C# 方法参数中的this参数
    引用:C#方法中的this参数-zh89233-博客园(cnblogs.com)publicstaticclassStringExtension{publicstaticvoidFoo(thisstrings){Console.WriteLine("Foo......
  • git提交指定文件 git add git commit git stash pop
    git提交指定文件gitaddgitcommitgitstashpopgit提交指定文件,如果此时修改了其他代码,可先提交指定代码,然后忽略不想提交的代码,最后push之后,恢复之前忽略的代码......
  • BackgroundService
    .NETCore实现后台任务(定时任务)BackgroundService.NETCore实现后台任务(定时任务)IHostedService 原文链接:https://www.cnblogs.com/ysmc/p/16456787.html最近......
  • js 如何给一个对象,动态添加属性字段
    第一种方法:无指定属性letobj={"name":"tom","age":16}letkey="id";letvalue=2obj[key]=value;console.log(obj)第二种方法,利用扩展运算符,简单又实用无......