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

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;
	}
}

http://www.kler.cn/a/231972.html

相关文章:

  • 前后端请求响应
  • Oracle Instant Client 23.5安装配置完整教程
  • 31.3 XOR压缩和相关的prometheus源码解读
  • GitHub Copilot使用指南:助力开发者加速编程创新
  • 车载诊断架构 --- 关于DTC的开始检测条件
  • 数据研发基础 | 什么是流批一体
  • 《Git 简易速速上手小册》第10章:未来趋势与扩展阅读(2024 最新版)
  • 【Unity】QFramework通用背包系统优化:TipPanel优化
  • 服务器与电脑的区别?
  • 座位预约|座位预约小程序|基于微信小程序的图书馆自习室座位预约管理系统设计与实现(源码+数据库+文档)
  • linux centos安装LibreOffice
  • IS-IS P2P网路类型 地址不在同一子网建立邻居关系
  • 踩坑实录(Third Day)
  • mysql:事务的特性ACID、并发事务(脏读、不可重复读、幻读、如何解决、隔离级别)、undo log和redo log的区别、相关面试题和答案
  • [嵌入式AI从0开始到入土]5_炼丹炉的搭建(基于wsl2_Ubuntu22.04)
  • 今日arXiv最热NLP大模型论文:无需数据集,大模型可通过强化学习与实体环境高效对齐 | ICLR2024
  • 创建一个Vue项目(含npm install卡住不动的解决)
  • 宽字节注入漏洞原理以及修复方法
  • 【Java万花筒】架构未来:Java ME与物联网的无缝融合
  • 电力负荷预测 | 基于GRU门控循环单元的深度学习电力负荷预测,含预测未来(Python)
  • 版本控制工具——Git
  • 用Matlab 2015a svmtrain函数训练的SVM model在2021b无法使用的解决方法
  • WPF绘制矢量图形并绑定到界面的方法
  • CTFshow web(php命令执行 37-40)
  • 高级数据结构与算法 | 布谷鸟过滤器(Cuckoo Filter):原理、实现、LSM Tree 优化
  • 汇编笔记 01