private static object GetValueFromType(Type type, string value) { if (value == null) { if (type.IsGenericType) { return(null); } else if (!type.IsPrimitive) { return(null); } else { // Error case. Value cannot be null for a non nullable primitive type throw new InvalidOperationException("Error in deserializing type " + type.FullName); } } if (type.IsGenericType && type.GetGenericTypeDefinition() == FormatterConstants.NullableType) { type = type.GetGenericArguments()[0]; } if (FormatterConstants.StringType.IsAssignableFrom(type)) { return(value); } else if (FormatterConstants.ByteArrayType.IsAssignableFrom(type)) { return(Convert.FromBase64String(value)); } else if (FormatterConstants.GuidType.IsAssignableFrom(type)) { return(new Guid(value)); } else if (FormatterConstants.DateTimeType.IsAssignableFrom(type) || FormatterConstants.DateTimeOffsetType.IsAssignableFrom(type) || FormatterConstants.TimeSpanType.IsAssignableFrom(type)) { return(FormatterUtilities.ParseDateTimeFromString(value, type)); } else if (FormatterConstants.DecimalType.IsAssignableFrom(type)) { return(Decimal.Parse(value, NumberStyles.Any, NumberFormatInfo.InvariantInfo)); // return Convert.ChangeType(value + "M", type, null); } else if (FormatterConstants.FloatType.IsAssignableFrom(type)) { return(float.Parse(value, NumberStyles.Any, NumberFormatInfo.InvariantInfo)); } else if (type.IsPrimitive) { return(Convert.ChangeType(value, type, CultureInfo.InvariantCulture)); } return(value); }
private static object GetValueFromType(Type type, string value) { if (value == null) { if (type.IsGenericType()) { return(null); } if (!type.IsPrimitive()) { return(null); } throw new InvalidOperationException("Error in deserializing type " + type.FullName); } if (type.IsGenericType() && type.GetGenericTypeDefinition() == FormatterConstants.NullableType) { type = type.GetGenericArguments()[0]; } if (FormatterConstants.StringType.IsAssignableFrom(type)) { return(value); } if (FormatterConstants.ByteArrayType.IsAssignableFrom(type)) { return(Convert.FromBase64String(value)); } if (FormatterConstants.GuidType.IsAssignableFrom(type)) { return(new Guid(value)); } if (FormatterConstants.DateTimeType.IsAssignableFrom(type) || FormatterConstants.DateTimeOffsetType.IsAssignableFrom(type) || FormatterConstants.TimeSpanType.IsAssignableFrom(type)) { return(FormatterUtilities.ParseDateTimeFromString(value, type)); } if (type.IsPrimitive() || FormatterConstants.DecimalType.IsAssignableFrom(type) || FormatterConstants.FloatType.IsAssignableFrom(type)) { return(Convert.ChangeType(value, type, CultureInfo.InvariantCulture)); } return(value); }