// core implementation of MakeSafeValue public static object MakeSafeValueCore(this Type propertyType, object value) { if (value == null) { return propertyType.CreateDefault(); } var safeValue = value; if (!propertyType.IsInstanceOfType(value)) { if (propertyType == typeof(string)) { safeValue = value.ToString(); } else if (propertyType.GetTypeInfo().IsEnum) { var s = value as string; safeValue = s != null ? Enum.Parse(propertyType, s, true) : Enum.ToObject(propertyType, value); } else if (propertyType.GetTypeInfo().IsValueType) { var underlyingType = Nullable.GetUnderlyingType(propertyType) ?? propertyType; safeValue = underlyingType == typeof(bool) ? value.ConvertToBooleanCore() : ErrorMaskedConvert(value, underlyingType, CultureInfo.CurrentUICulture); } else { safeValue = ErrorMaskedConvert(value, propertyType, CultureInfo.CurrentUICulture); } } return safeValue; }
public static object MakeSafeValue(this Type propertyType, object value) { if (value == null) { return propertyType.CreateDefault(); } var autoConverter = MvxBindingSingletonCache.Instance.AutoValueConverters.Find(value.GetType(), propertyType); if (autoConverter != null) { return autoConverter.Convert(value, propertyType, null, CultureInfo.CurrentUICulture); } return propertyType.MakeSafeValueCore(value); }
public static object MakeSafeValue(this Type propertyType, object value) { if (value == null) { return propertyType.CreateDefault(); } var autoConverter = MvxBindingSingletonCache.Instance.AutoValueConverters.Find (value.GetType(), propertyType); if (autoConverter != null) { return autoConverter.Convert (value, propertyType, null, CultureInfo.CurrentUICulture); } var safeValue = value; if (!propertyType.IsInstanceOfType(value)) { if (propertyType == typeof (string)) { safeValue = value.ToString(); } else if (propertyType.IsEnum) { if (value is string) safeValue = Enum.Parse(propertyType, (string) value, true); else safeValue = Enum.ToObject(propertyType, value); } else if (propertyType.IsValueType) { var underlyingType = Nullable.GetUnderlyingType(propertyType) ?? propertyType; if (underlyingType == typeof(bool)) safeValue = value.ConvertToBoolean(); else safeValue = ErrorMaskedConvert(value, underlyingType, CultureInfo.CurrentUICulture); } else { safeValue = ErrorMaskedConvert(value, propertyType, CultureInfo.CurrentUICulture); } } return safeValue; }