예제 #1
0
        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);
        }
예제 #2
0
        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);
        }