c#通过反射实现对象自动映射的实现

 更新时间:2024年02月12日 10:46:18   作者:彭小彭~  
本文主要介绍了c#通过反射完成对象自动映射的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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

我们在编程过程中,经常需要将一个对象转成另一个对象(一般称为对象映射)。
比如我们有2个类:

//第1个类 CLS1
class CLS1
{
    public int i {get; set;}
	public string str {get; set;}
}
//第2个类 CLS2
class CLS2
{
    public int i {get; set;}
	public string str {get; set;}
}

两个类都拥有属性 i 和 str
当我们需要将 CLS1 的实例对象转化为 CLS2 的实例对象时,正常会这样操作:

CLS1 obj1 = new CLS1(){i = 1, str = "ss"};
CLS2 obj2 = new CLS2();
//将 obj1 映射为 obj2
obj2.i = obj1.i; //obj2.i = 1; 
obj2.str = obj1.str; //obj2.str = "ss";

如果属性多了,写起来会很繁琐,希望可以通过一个方法自动帮我们解决,比如这样:

//将 CLS1 的对象映射为 CLS2 的对象
obj2 = Mapper.T1MapToT2<CLS1, CLS2>(obj1); //obj2.i = 1; obj2.str = "ss";

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

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

到此这篇关于c#通过反射完成对象自动映射的实现的文章就介绍到这了,更多相关c# 对象自动映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • C# 实现简易的串口监视上位机功能附源码下载

    C# 实现简易的串口监视上位机功能附源码下载

    这篇文章主要介绍了C# 实现简易的串口监视上位机功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • C#导入导出Excel数据的两种方法

    C#导入导出Excel数据的两种方法

    这篇文章主要为大家详细介绍了C#导入导出Excel数据的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • c#中实现图片灰度化技术详解

    c#中实现图片灰度化技术详解

    这篇文章主要介绍了c#中实现图片灰度化技术详解,本文给出计算公式和实现代码以及图片例子,需要的朋友可以参考下
    2014-08-08
  • 服务器端C#实现的CSS解析器

    服务器端C#实现的CSS解析器

    服务器端C#实现的CSS解析器
    2008-09-09
  • C#实现Word转为PDF的方法

    C#实现Word转为PDF的方法

    今天小编就为大家分享一篇关于C#实现Word转为PDF的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • C#属性(Attribute)用法实例解析

    C#属性(Attribute)用法实例解析

    这篇文章主要介绍了C#属性(Attribute)用法实例解析,需要的朋友可以参考下
    2014-08-08
  • C#_SqlDependency的使用详解

    C#_SqlDependency的使用详解

    SqlDependency对象表示应用程序和 SQL Server 实例间的查询通知依赖关系,这篇文章主要介绍了C#_SqlDependency的使用,需要的朋友可以参考下
    2023-06-06
  • C#使用iTextSharp设置PDF所有页面背景图功能实例

    C#使用iTextSharp设置PDF所有页面背景图功能实例

    这篇文章主要介绍了C#使用iTextSharp设置PDF所有页面背景图功能,实例分析了C#使用iTextSharp设置PDF页面背景图的实现方法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Unity UGUI的RawImage原始图片组件使用示例详解

    Unity UGUI的RawImage原始图片组件使用示例详解

    这篇文章主要为大家介绍了Unity UGUI的RawImage原始图片组件使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • c#实现适配器模式的项目实践

    c#实现适配器模式的项目实践

    适配器模式将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作,本文主要介绍了c#实现适配器模式的项目实践,感兴趣的可以一起来了解一下
    2023-08-08

最新评论