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

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

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

csharp 复制代码
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;
	}
}
相关推荐
yongshao89 小时前
C#上位机通过NetToPLCsim与西门子PLC仿真连接通信
机器人·c#·信息与通信
yngsqq10 小时前
加载dll插件自动提示文字信息——cad c#二次开发
开发语言·c#
CoreFMEA软件15 小时前
0 - 1 背包问题介绍与 C# 代码实现
开发语言·算法·c#·背包问题
FAREWELL0007519 小时前
C#基础学习(六)函数的变长参数和参数默认值
学习·c#·数组
[abcdem]20 小时前
c#个人向总结
开发语言·c#
旧厂街小江1 天前
LeetCode第95题:不同的二叉搜索树 II
python·算法·c#
程序设计实验室1 天前
基于.NetCore开发 StarBlog 番外篇 (3) StarBlog Publisher,跨平台一键发布,DeepSeek加持的文章创作神器
c#·avalonia·starblog博客开发笔记
yngsqq1 天前
AutoCAD C#二次开发中WinForm与WPF的对比
c#
欣然~1 天前
基于词袋模型(Bag-of-Words)的简单神经网络的对话
开发语言·c#
csdn_aspnet1 天前
C# 如何检查给定的四个点是否形成一个正方形(How to check if given four points form a square)
算法·c#