Ejemplo n.º 1
0
        /// <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);
        }