当前位置: 首页 > news >正文

c#通过反射完成对象自动映射

在 C# 中,可以使用 AutoMapper 库来完成对象之间的映射,而不必手动编写显式的映射代码。但是,如果你希望通过反射来动态完成对象的映射,你可以编写自己的映射逻辑并使用反射来完成这个过程。

下面是一个简单的示例,演示了如何使用反射来完成对象之间的映射:


class Program
{static void Main(){// 创建源对象Person source = new Person { Name = "Alice", Age = 25 };// 创建目标对象PersonDto destination = new PersonDto();destination = source.MapTo<Person, PersonDto>();// 输出目标对象的属性值Console.WriteLine($"Name: {destination.Name}, Age: {destination.Age}");}
}class Person
{public string Name { get; set; }public int Age { get; set; }
}class PersonDto
{public string Name { get; set; }public int Age { get; set; }
}
static class AutoMapper
{public static TDest MapTo<TSource, TDest>(this TSource source) where TSource : class, new() where TDest : class, new(){// 创建目标对象TDest destination = new TDest();// 获取源对象的所有属性PropertyInfo[] sourceProperties = typeof(TSource).GetProperties();// 获取目标对象的所有属性PropertyInfo[] destinationProperties = typeof(TDest).GetProperties();// 使用反射完成对象的映射foreach (var sourceProperty in sourceProperties){foreach (var destinationProperty in destinationProperties){if (sourceProperty.Name == destinationProperty.Name && sourceProperty.PropertyType == destinationProperty.PropertyType){// 通过反射获取源对象的属性值object value = sourceProperty.GetValue(source);// 通过反射设置目标对象的属性值destinationProperty.SetValue(destination, value);break;}}}return destination;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Netty——基于Java NIO的网络通信框架
  • 如何运行心理学知识(心流)来指导工作和生活
  • JVM-虚拟机栈
  • 计算机视觉主要知识点
  • abap - 发送邮件,邮件正文带表格和excel附件
  • 使用python-numpy实现一个简单神经网络
  • 《剑指 Offer》专项突破版 - 面试题 38、39 和 40 : 通过三道面试题详解单调栈(C++ 实现)
  • 蓝桥杯Web应用开发-CSS3 新特性
  • 机器学习与深度学习
  • 【笔记】Harmony学习:下载安装 DevEco Studio 开发工具IDE
  • gem5学习(19):gem5内存系统——The gem5 Memory System
  • transformer剪枝论文汇总
  • 使用内联函数,降低函数调用开销,实现移动时绘制
  • GPIO结构
  • Docker-CE 国内源国内镜像
  • gitlab-ci配置详解(一)
  • Java IO学习笔记一
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • swift基础之_对象 实例方法 对象方法。
  • Terraform入门 - 1. 安装Terraform
  • uni-app项目数字滚动
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 反思总结然后整装待发
  • 每天一个设计模式之命令模式
  • 排序算法学习笔记
  • 前端设计模式
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 深度解析利用ES6进行Promise封装总结
  • 小李飞刀:SQL题目刷起来!
  • 一道闭包题引发的思考
  • 因为阿里,他们成了“杭漂”
  • kubernetes资源对象--ingress
  • MPAndroidChart 教程:Y轴 YAxis
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #微信小程序:微信小程序常见的配置传值
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (21)起落架/可伸缩相机支架
  • (回溯) LeetCode 131. 分割回文串
  • (九)One-Wire总线-DS18B20
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (四)JPA - JQPL 实现增删改查
  • ***详解账号泄露:全球约1亿用户已泄露
  • ... 是什么 ?... 有什么用处?
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .net对接阿里云CSB服务
  • .NET开源、简单、实用的数据库文档生成工具
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .net专家(高海东的专栏)
  • .sh
  • .stream().map与.stream().flatMap的使用
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • @Transactional类内部访问失效原因详解