首页 > 其他分享 >ObjectMapper 对象之间转换,针对两个对象属性名称不一样,这里用特性来关联

ObjectMapper 对象之间转换,针对两个对象属性名称不一样,这里用特性来关联

时间:2023-02-07 11:46:32浏览次数:56  
标签:set string get 对象 Description 人数 public ObjectMapper 属性

     /// <summary>
        /// 序列化+反射转换(针对两个对象属性名称不一样,这里用特性来关联)
        /// </summary>
        /// <typeparam name="TObject">目标对象(增加DescriptionAttribute特性 来关联来源对象)</typeparam>
        /// <typeparam name="Source">来源对象</typeparam>
        /// <param name="t"></param>
        /// <param name="s"></param>
        /// <returns></returns>
        public static TObject SerializeByDescript<Source, TObject>(Source s) where TObject : class
        {
            Type type = typeof(TObject);
            TObject t = (TObject)Activator.CreateInstance(type);
            Dictionary<string, object> dic = new Dictionary<string, object>();
            foreach (var property in type.GetProperties())
            {
                var attributes = property.GetCustomAttributes(typeof(DescriptionAttribute), false);
                if (attributes.Length > 0)
                {
                    //有描叙特性,则用描叙特性代替属性
                    var descript = ((DescriptionAttribute)attributes[0]).Description;//获取描叙特性
                    var rproperty = typeof(Source).GetProperty(descript);
                    if (property != null)
                    {
                        dic.Add(property.Name, rproperty.GetValue(s, null));
                    }
                }
                else
                {
                    dic.Add(property.Name, property.GetValue(t, null));
                }
            }
            return JsonConvert.DeserializeObject<TObject>(JsonConvert.SerializeObject(dic));
        }
  public class AnalysisDto
    {
        /// <summary>
        /// 指标类型
        /// </summary>
        public int QualityIndexType { get; set; }

        /// <summary>
        /// 指标名称
        /// </summary>
        public string QualityIndexName { get; set; }

        /// <summary>
        /// 当期人数
        /// </summary>
        [Description("当期人数")]
        public string CurrentNum { get; set; }

        /// <summary>
        /// 当期指标人数
        /// </summary>
        [Description("当期指标人数")]
        public string CurrentPeriodNum { get; set; }

        /// <summary>
        /// 当期指标率
        /// </summary>
        [Description("当期指标率")]
        public string CurrentPeriodRatio { get; set; }

        /// <summary>
        /// 上期人数
        /// </summary>
        [Description("上期人数")]
        public string LastNum { get; set; }

        /// <summary>
        /// 上期指标人数
        /// </summary>
        [Description("上期指标人数")]
        public string LastPeriodNum { get; set; }

        /// <summary>
        /// 上期指标率
        /// </summary>
        [Description("上期指标率")]
        public string LastPeriodRatio { get; set; }

        /// <summary>
        /// 环比
        /// </summary>
        [Description("环比")]
        public string RingRatio { get; set; }

        /// <summary>
        /// 同期人数
        /// </summary>
        [Description("同期人数")]
        public string CorrespondingNum { get; set; }

        /// <summary>
        /// 同期指标人数
        /// </summary>
        [Description("同期指标人数")]
        public string CorrespondingPeriodNum { get; set; }

        /// <summary>
        /// 同期指标率
        /// </summary>
        [Description("同期指标率")]
        public string CorrespondingPeriodRatio { get; set; }

        /// <summary>
        /// 同比
        /// </summary>
        [Description("同比")]
        public string YearOnYearRatio { get; set; }

        /// <summary>
        /// 指标人数环比
        /// </summary>
        [Description("指标人数环比")]
        public string TagRingRatio { get; set; }

        /// <summary>
        /// 总人数环比
        /// </summary>
        [Description("总人数环比")]
        public string TotalRingRatio { get; set; }

        /// <summary>
        /// 指标人数同比
        /// </summary>
        [Description("指标人数同比")]
        public string TagYearOnYearRatio { get; set; }

        /// <summary>
        /// 总人数同比
        /// </summary>
        [Description("总人数同比")]
        public string TotalYearOnYearRatio { get; set; }
    }
  public class AnalysisConvertDto
    {
        public string 当期人数 { get; set; }
        public string 当期指标人数 { get; set; }
        public string 当期指标率 { get; set; }
        public string 上期人数 { get; set; }
        public string 上期指标人数 { get; set; }
        public string 上期指标率 { get; set; }
        public string 环比 { get; set; }
        public string 同期人数 { get; set; }
        public string 同期指标人数 { get; set; }
        public string 同期指标率 { get; set; }
        public string 同比 { get; set; }
        public string 指标人数环比 { get; set; }
        public string 总人数环比 { get; set; }
        public string 指标人数同比 { get; set; }
        public string 总人数同比 { get; set; }
    }
 var xmodel = await _xMapperRepository.QuerySingleOrDefaultAsync<AnalysisConvertDto>("GetSingleQualityIndex", ps); //接收存储过程返回的 中文实体对象数据
 var model = JsonConvertHelper.SerializeByDescript<AnalysisConvertDto, AnalysisDto>(xmodel);//转换成数据库实体英文对象

 到这里就已经实现了,两个对象之间 属性名称不一致的转换,这里主要通过自定义特性Description 来进行关联 

标签:set,string,get,对象,Description,人数,public,ObjectMapper,属性
From: https://www.cnblogs.com/hp66/p/17097844.html

相关文章

  • 类与对象的创建
    //学生类publicclassStudent{//属性:字段Stringname;//nullintage;//0//方法publicvoidsay(){System.out.println(this.name+"在学习......
  • javaScript - String对象的创建,全部属性,常用方法,全部方法
    1.String对象的创建//方式1字面量方式varstr="levi";//方式2创建对象方式varstr=newString("levi"); 2.String对象的属性:属性描述constructor对创建......
  • 面向对象编程
    6.1面向对象编程相关概念6.1.1什么是面向对象编程面向对象编程——ObjectOrientedProgramming,简称OOP,是一种程序设计思想。在该思想中程序里万物都是对象。OOP把对......
  • Java中进行单元测试junit.Assert断言、Mockito模拟对象、verify验证模拟结果、Java8中
    场景Java8新特性-Stream对集合进行操作的常用API:​​Java8新特性-Stream对集合进行操作的常用API_霸道流氓气质的博客-博客_javalist.stream​​在上面使用流操作时需要用到......
  • [openlayers06]——根据features的属性设置style
    [openlayers06]_根据features的属性设置style1.说明Makingitlooknice我们会希望不同的要素展示成不用的样式(style),下面的内容:展示如何根据features自身的属性设......
  • Java面向对象
    面向对象编程的本质:以类的方式组织代码,以对象的组织封装数据。1、封装程序设计要追求高内聚,低耦合。应禁止直接访问一个对象中数据的实际表示。封装指属性私有化,提供公......
  • Java类与对象
     一、类1、概念类:是数据和对数据进行处理的方法的集合体对象:类的实例,任何事物都可以是对象2、定义基本格式:[类修饰符]class<名称>{变量定义和方法定义}类的成......
  • javaScript - 函数,函数的定义与函数的特性,函数的内置对象
    1.函数的定义//方式1无参无返回值函数functionclose(){}//方式2有参有返回值函数functionset(id,name){returnid+name;}//方式3匿名函数varcallback=......
  • 对象和类之间的区别
    对象是类的一个实例。类是创建对象的蓝图或模板。对象是真实世界的实体,如笔,笔记本电脑,手机,床,键盘,鼠标,椅子等。类是一组类似的对象。对象是一个物理实体。......
  • 第6章:面向对象编程(下)
    第6章:面向对象编程(下)1、关键字:static1.1引入当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生对象,这时,系统才......