public override object Convert(object value, Type type) { if (value == null) { return(TypeHelper.GetDefault(type)); } type = TypeHelper.GetNonNullableType(type); if (type == typeof(Time)) { return(Time.Parse(value.ToString())); } if (type == typeof(Time2)) { return(Time2.Parse(value.ToString())); } Type vtype = value.GetType(); if (type != vtype) { if (type.IsEnum) { if (vtype == typeof(string)) { return(Enum.Parse(type, (string)value)); } else { Type utype = Enum.GetUnderlyingType(type); if (utype != vtype) { value = System.Convert.ChangeType(value, utype); } return(Enum.ToObject(type, value)); } } return(System.Convert.ChangeType(value, type)); } return(value); }