反射工具类请参见: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. 竞品分析框架及案例-探索业务方向
  2. (转)ASIHTTPRequest 详解, http 请求终结者
  3. 你胆敢不加break试试?
  4. 测试电梯的测试用例_测试用例设计经典面试题
  5. linux mysql 删除表脚本_linux shell脚本自动删除mysql表前3个月的数据
  6. 【硬件】PCB设计步骤
  7. python代码html显示数据_通过AJAX success方法以html格式显示数据
  8. python socket多线程 获取朋友列表_python中的(多线程)套接字列表/数组
  9. RestTemplate与Feign使用对比
  10. linux(Centos5.1)升级至2.6.19内核+L7实现-- 续限P2P软件
  11. Oracle表删除大量数据后查询变慢问题
  12. 自反馈与 Mandelbrot set
  13. postman删除workspace
  14. 向第三次世界大战中的勇士致敬
  15. 来吧,一文彻底搞懂Java中最特殊的存在——null
  16. JavaScript中的let声明
  17. 轻量级rpc框架Hessian
  18. 搭建清晰的前端技术体系
  19. 冲量在线当选中关村数字经济产业联盟理事单位
  20. 计算机科学出国,假如你是李华,打算出国学习计算机科学.现在给在美国工作的David Zhang写信,了解以下情况.1.需参加的英语考试;...

热门文章

  1. java unsafe 详解_Java CAS操作与Unsafe类详解
  2. mysql批量删除进程_小程序批量删除云数据库里的数据
  3. curlopt_ssl_verifypeer后https还是验证不过_为什么 HTTPS 需要 7 次握手和 9 倍时延
  4. WaveShaperNode
  5. CUDA C编程权威指南 第四章 全局内存
  6. python 顺序表
  7. C语言把整数转换为字符串
  8. 陕西省2021年高考成绩位次查询,2021年陕西高考个人排名怎么查询,陕西高考成绩排名查询方法...
  9. 数据传输服务 DTS > 产品简介 > 功能特性 > 数据订阅(旧版)
  10. 阿里云未来三年投2000亿“搞基”背后的野心和公心(2020年4月)