反射工具类请参见:https://www.cnblogs.com/threadj/p/10535796.html

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Reflection;namespace ReligionServer.util {public class BeanUtil {/// <summary>/// 两个对象的相同属性复制, 会将Source中与Target属性名相同的属性赋值(且属性类型相同), target中别的属性值不会被破坏/// </summary>/// <param name="source"></param>/// <param name="target"></param>/// <returns></returns>public static Object PropCopy(Object source, Object target) {//在后来的修改之后, 返回List, 且包含当前类和除开Object的所有父类的属性//List<FieldInfo> sourceFields = ReflectionUtil.GetFileldS(source.GetType());//List<FieldInfo> targetFields = ReflectionUtil.GetFileldS(target.GetType());foreach (FieldInfo sourceItem in ReflectionUtil.GetFileldS(source.GetType())) {foreach (FieldInfo targetItem in ReflectionUtil.GetFileldS(target.GetType())) {if (sourceItem.Name.Equals(targetItem.Name) && sourceItem.FieldType.Equals(targetItem.FieldType)) {//targetItem.SetValue(target, sourceItem.GetValue(source).ToString().Trim());//可能出现空指针, 字段的类型也应该保持一致, 所以不应该ToString 和 Trim
                        targetItem.SetValue(target, sourceItem.GetValue(source));break;}}}return target;}/// <summary>/// 两个对象的相同属性复制, 会将Source中与Target属性名相同的属性赋值(且属性类型相同), target中别的属性值不会被破坏/// 如果属性值相同的则不进行复制, withOutNull参数为true, 那么source中为null或者为""的属性则不复制,/// 暂时没有测试/// </summary>/// <param name="source"></param>/// <param name="target"></param>/// <param name="withOutNull"></param>/// <returns></returns>public static Object PropCopyWithOutSame(Object source, Object target, bool withOutNull) {//在后来的修改之后, 返回List, 且包含当前类和除开Object的所有父类的属性//List<FieldInfo> sourceFields = ReflectionUtil.GetFileldS(source.GetType());//List<FieldInfo> targetFields = ReflectionUtil.GetFileldS(target.GetType());foreach (FieldInfo sourceItem in ReflectionUtil.GetFileldS(source.GetType())) {foreach (FieldInfo targetItem in ReflectionUtil.GetFileldS(target.GetType())) {if (sourceItem.Name.Equals(targetItem.Name) && sourceItem.FieldType.Equals(targetItem.FieldType)) {//targetItem.SetValue(target, sourceItem.GetValue(source).ToString().Trim());//可能出现空指针, 字段的类型也应该保持一致, 所以不应该ToString 和 Trimif (sourceItem.GetValue(source) != targetItem.GetValue(target)) {//这里判断相等不能使用Equals, 因为很有可能出现空指针异常if (withOutNull) {bool flag = IsEmpty(sourceItem.FieldType, sourceItem.GetValue(source));if (!flag) {targetItem.SetValue(target, sourceItem.GetValue(source));}} else {targetItem.SetValue(target, sourceItem.GetValue(source));}break;}}}}return target;}public static bool IsEmpty(Type type, Object value) {bool flag = true;if (type.Equals(typeof(DateTime))) {flag = value == null;} else if (type.Equals(typeof(MongoDB.Bson.BsonValue))) {flag = MongoDB.Bson.BsonValue.Create(value) == null;} else if (type.Equals(typeof(String))) {flag = CommonUtil.IsEmpty(Convert.ToString(value));} else {flag = value == null;}return flag;}}
}

转载于:https://www.cnblogs.com/threadj/p/10535839.html

C#反射——模仿BeanUtil属性复制相关推荐

  1. 通过反射创建私有化构造的类,并为私有化属性复制。调用私有化方法

    import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...

  2. 通过反射为对象属性赋值

    /// <summary>/// 通过反射为对象属性赋值/// </summary>/// <typeparam name="T">类型参数&l ...

  3. Java实现两个不同泛型集合之间的属性复制

    写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...

  4. java对象的类型转换_Java对象的类型转换和属性复制

    1. 问题的源由 在J2EE项目开发中,会涉及很多领域模型对象,例如, VO (View Object) 视图对象,也叫展示对象,用于前端页面渲染所需要的数据 DTO (Data Transfer O ...

  5. java bean 对象属性复制框架BeanMapping-release_0.0.2-注解支持

    BeanMapping 为了更加灵活的指定映射方式,0.0.2 版本引入了 @BeanMapping 注解. 注解的定义 注解定义在 bean-mapping-api 模块中,bean-mapping ...

  6. java 操作属性值_java反射机制根据属性名获取属性值的操作

    一.考虑安全访问范围内的属性,没有权限访问到的属性不读取 /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ priv ...

  7. C# 使用反射获取私有属性的方法

    本文告诉大家多个不同的方法使用反射获得私有属性,最后通过测试性能发现所有的方法的性能都差不多 在开始之前先添加一个测试的类 public class Foo{private string F { se ...

  8. Android 9无法通过反射获取系统属性

    Android 9.0之后获取无法通过反射获取系统属性,如果我们需要知道手机某个属性,可以通过以下的方式.注意:这种方式不能获取所有的属性.不然谷歌限制SystemProper的访问就没有意义了. p ...

  9. java高级反射(一),通过反射批量修改属性值set,get方法 Field,对属性值进行统一操作

    通过反射批量修改属性值set,get方法 Field 需求说明:对接一个系统,对方系统要求每个字段value值加密,加密方法为WebAppAESUtil.encrypt,做之前就想做一个对属性统一操作 ...

最新文章

  1. 关于linux安装前规划分区二三事
  2. requests.exceptions.SSLError: hostname '127.0.0.1' doesn't match None
  3. Windows内核新手上路1——挂钩SSDT
  4. jmeter测试java代码
  5. inet_aton和inet_network和inet_addr三者比较-《别怕Linux编程》之五
  6. vb 字符串替换_学习VB编程第69天 字符串查找与替换
  7. 数控铣削图案及编程_数控铣削简单图案编程
  8. jdbc java数据库连接 3)Statement接口之执行DDL和DML语句的简化
  9. python3 规则引擎_几个常见规则引擎的简单介绍和演示
  10. vue从入门到精通之基础篇(三)生命周期
  11. GRPC与.net core
  12. python合并csv文件_Python学习——pandas 合并csv文件
  13. FreeRTOS任务延时函数
  14. “在格力干到退休,这套房就给你了!”董明珠称将投放3700套人才房…
  15. 李彦宏告诫年轻人:向前看两年
  16. CSDN统计出错:一天访问量竟然有48798
  17. 34个有用的 JavaScript 库,现在就可以用起来
  18. Java中--XX和XX的区别
  19. 软件定义和硬件重构知多少(三)
  20. Doom3引擎初始化分析

热门文章

  1. html绘制流程图飞线,基于jsplumb绘制流程图
  2. solarflare低延迟网卡_动态丨赛灵思收购solarflare,数据优先是重要布局
  3. Python Logging.basicConfig
  4. linux iptables
  5. sorted(iterable[, key][, reverse])
  6. 中国数据中心行业深度分析
  7. 优秀员工和普通员工的十大区别,老板和员工都应该知道
  8. XEON® Scalable-如何为虚拟化挑选合适的CPU
  9. Mysql学习总结(65)——项目实战中常用SQL实践总结
  10. JavaScript学习总结(3)——JavaScript函数(function)