/// <summary> /// Metodo que permite copiar los valores de las propiedades del mismo nombre entre un DTO y otro /// </summary> /// <typeparam name="T">Tipo de dato DTO origen</typeparam> /// <typeparam name="X">Tipo de dato DTO destino</typeparam> /// <param name="datoOriginal">DTO origen</param> /// <param name="datoCopia">DTO destino</param> /// <creador>Jonathan Contreras</creador> /// <fecha_creacion>27-09-2010</fecha_creacion> public static void MapearDatos <T, X>(T datoOriginal, X datoCopia, String[] listaPropiedades) { if (datoOriginal == null || datoCopia == null) { return; } System.Reflection.PropertyInfo objPropiedadX = null, objPropiedadT = null; Type objTipoX = typeof(X), objTipoT = typeof(T), objTipoConversion = null; Object objValorOriginal = null; System.ComponentModel.NullableConverter objConversor = null; for (int intIndice = 0; intIndice < listaPropiedades.Length; intIndice++) { objPropiedadT = objTipoT.GetProperty(listaPropiedades[intIndice]); if (objPropiedadT != null) { objPropiedadX = objTipoX.GetProperty(listaPropiedades[intIndice]); if (objPropiedadX == null) { objPropiedadX = objTipoX.GetProperty(Texto.SepararTextoPorMayusculas(listaPropiedades[intIndice]).Replace(" ", "_").ToUpper()); } if (objPropiedadX == null) { objPropiedadX = objTipoX.GetProperty(Texto.ConvertirAMinusculaPrimeraEnMayuscula(listaPropiedades[intIndice].ToLower().Replace("_", " ")).Replace(" ", "")); } if (objPropiedadX != null && objPropiedadX.CanWrite) { objTipoConversion = objPropiedadX.PropertyType; if (objTipoConversion.IsGenericType) { objConversor = new System.ComponentModel.NullableConverter(objTipoConversion); objTipoConversion = objConversor.UnderlyingType; } if ((objValorOriginal = objPropiedadT.GetValue(datoOriginal, null)) != null) { objValorOriginal = Convert.ChangeType(objValorOriginal, objTipoConversion); if (objValorOriginal != null) { objPropiedadX.SetValue(datoCopia, objValorOriginal, System.Reflection.BindingFlags.Default, null, null, null); } } } } } ValidarDatosFecha <X>(ref datoCopia); }