【Mapper】类与类之间属性复制帮助类
参考自:https://www.cnblogs.com/gangle/p/11905331.html

public class MapperHelper { #region 适用于从表映射到界面定义类 #region B类映射到A类(全属性赋值,不区分大小写) /// <summary> /// 传入类型B的对象b,将b与a相同名称的值进行赋值给创建的a中【全属性赋值,不区分大小写】 /// </summary> /// <typeparam name="A">类型A</typeparam> /// <typeparam name="B">类型B</typeparam> /// <param name="b">类型为B的参数b</param> /// <returns>拷贝b中相同属性的值的a</returns> public static A MapperTo<A, B>(B b) { return Newtonsoft.Json.JsonConvert.DeserializeObject<A>(Newtonsoft.Json.JsonConvert.SerializeObject(b)); } #endregion #region B类映射到A类(全属性赋值,区分大小写) /// <summary> /// 传入类型B的对象b,将b与a相同名称的值进行赋值给创建的a中【全属性赋值,区分大小写】 /// </summary> /// <typeparam name="A">类型A</typeparam> /// <typeparam name="B">类型B</typeparam> /// <param name="b">类型为B的参数b</param> /// <returns>拷贝b中相同属性的值的a</returns> public static A MapperTo_V2<A, B>(B b) { A a = Activator.CreateInstance<A>(); try { Type Typeb = typeof(B);//获得类型 Type Typea = typeof(A); foreach (PropertyInfo ap in Typea.GetProperties()) { System.Reflection.PropertyInfo bp = Typeb.GetProperty(ap.Name); //获取指定名称的属性 if (bp != null) //如果B对象也有该属性 { if (ap.GetSetMethod() != null) //判断A对象是否有能用Set方法 { if (bp.GetGetMethod() != null) //判断B对象是否有能用Get方法 { ap.SetValue(a, bp.GetValue(b, null), null);//获得b对象属性的值复制给a对象的属性 } } } } } catch (Exception ex) { throw ex; } return a; } #endregion #endregion #region 适用于从界面输入映射到表类 #region 小类B属性复制到大类A中,替换A中的对应属性值(A类属性首字母大写) /// <summary> /// 小类B属性复制到大类A中,替换A中的对应属性值(A类属性首字母大写) /// </summary> /// <typeparam name="A">类型A</typeparam> /// <typeparam name="B">类型B</typeparam> /// <param name="b">类型为B的参数b</param> /// <returns>拷贝b中相同属性的值的a</returns> public static A MapperToFirstBig<A, B>(A a,B b) { try { Type Typeb = typeof(B);//获得类型 Type Typea = typeof(A); foreach (PropertyInfo bp in Typeb.GetProperties()) { System.Reflection.PropertyInfo ap = Typea.GetProperty(ConvertToUpper(bp.Name)); //获取指定名称的属性 if (ap != null) //如果B对象也有该属性 { if (bp.GetSetMethod() != null) //判断A对象是否有能用Set方法 { if (ap.GetGetMethod() != null) //判断B对象是否有能用Get方法 { ap.SetValue(a, bp.GetValue(b, null), null);//获得b对象属性的值复制给a对象的属性 } } } } } catch (Exception ex) { throw ex; } return a; } #endregion #region 小类B属性复制到大类A中,替换A中的对应属性值(A类属性首字母都小写的) /// <summary> /// 小类B属性复制到大类A中,替换A中的对应属性值(A类属性首字母都小写的) /// </summary> /// <typeparam name="A">类型A</typeparam> /// <typeparam name="B">类型B</typeparam> /// <param name="b">类型为B的参数b</param> /// <returns>拷贝b中相同属性的值的a</returns> public static A MapperToLower<A, B>(A a, B b) { try { Type Typeb = typeof(B);//获得类型 Type Typea = typeof(A); foreach (PropertyInfo bp in Typeb.GetProperties()) { System.Reflection.PropertyInfo ap = Typea.GetProperty(bp.Name.ToLower()); //获取指定名称的属性 if (ap != null) //如果B对象也有该属性 { if (bp.GetSetMethod() != null) //判断A对象是否有能用Set方法 { if (ap.GetGetMethod() != null) //判断B对象是否有能用Get方法 { ap.SetValue(a, bp.GetValue(b, null), null);//获得b对象属性的值复制给a对象的属性 } } } } } catch (Exception ex) { throw ex; } return a; } #endregion # region 返回所有单词首字改为大写后的结果 /// <summary> /// 返回所有单词首字改为大写后的结果 /// </summary> /// <param name="str">普通字符串</param> /// <returns>所有单词更改为首字母大写</returns> public static string ConvertToUpper(string str) { string s = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(str); return s; } #endregion #endregion }