public object ConvertValue(TypeEquality typeEquality, object value) { var result = value; MethodInfo method = null; var sourceResolve = typeEquality.SourceResolve; var targetResolve = typeEquality.TargetResolve; if (typeEquality.AreEnumerablesTypesEquel) { if (sourceResolve.IsEnumerableTypeGenericModel) { method = sourceResolve.PropertyType.GetMethod("MapListOfModels", new[] { targetResolve.PropertyType }); method = method.MakeGenericMethod(targetResolve.EnumerableTypes.First()); } else if (targetResolve.IsEnumerableTypeGenericModel) { method = typeof(Models.GenericModel).GetMethods() .Where(m => m.Name == "MapListOfModels") .First(m => m.GetGenericArguments().Count() == 2); method = method.MakeGenericMethod(sourceResolve.EnumerableTypes.First(), targetResolve.EnumerableTypes.First()); } else if (typeEquality.AreEnumerablesTypesSimple) { return(result); } else { var message = string.Format( "At least source or target need to be of type IGenericModel, source propertey is of type {0}, target propertey is of type {1}", sourceResolve.PropertyType, targetResolve.PropertyType); throw new Exception(message); } result = method.Invoke(null, new[] { value }); } else { if (sourceResolve.IsEnumerableTypeNumeric || targetResolve.IsEnumerableTypeNumeric) { var targetType = targetResolve.EnumerableTypes.First(); method = typeof(Models.GenericModel).GetMethod("ConvertEnumerable", BindingFlags.NonPublic | BindingFlags.Static); var generic = method.MakeGenericMethod(targetType); result = generic.Invoke(null, new[] { value }); return(result); } } return(result); }
public object ConvertValue(TypeEquality typeEquality, object value) { object result = null; var targetResolve = typeEquality.TargetResolve; var sourceResolve = typeEquality.SourceResolve; if (targetResolve.IsGenericModel) { result = Activator.CreateInstance(targetResolve.PropertyType, value); } else if (sourceResolve.IsGenericModel) { var method = sourceResolve.MapToMethod; var methodType = method.MakeGenericMethod(targetResolve.PropertyType); result = methodType.Invoke(value, null); } else if (targetResolve.IsEnum || sourceResolve.IsEnum) { return(value); } else if (targetResolve.IsNullable || sourceResolve.IsNullable) { if (targetResolve.UnderlyingType.IsEnum) { result = Enum.ToObject(targetResolve.UnderlyingType, value); } else if (sourceResolve.UnderlyingType.IsEnum) { result = Convert.ChangeType(value, targetResolve.UnderlyingType); } } else { var message = string.Format( "At least source or target need to be of type IGenericModel, source propertey is of type {0}, target propertey is of type {1}", sourceResolve.PropertyType, targetResolve.PropertyType); throw new Exception(message); } return(result); }
public object ConvertValue(TypeEquality typeEquality, object value) { return(value.ToString()); }
public object ConvertValue(TypeEquality typeEquality, object source) { throw new System.NotImplementedException(); }
private static TypeEquality CheckTypes(ResolveModel source, ResolveModel target) { var typeEquality = new TypeEquality(source, target); return(typeEquality); }