Esempio n. 1
0
        /// <summary>
        /// Parses the given string value converting it to the given type.
        /// </summary>
        /// <typeparam name="T">The <see cref="Type" /> to convert the string to.</typeparam>
        /// <param name="value">The <see cref="string" /> value to parse.</param>
        /// <param name="culture">The <see cref="CultureInfo" /> to use as the current culture.
        /// <remarks>If not set will parse using <see cref="CultureInfo.InvariantCulture" /></remarks></param>
        /// <returns>
        /// The <typeparamref name="T" />.
        /// </returns>
        public T ParseValue <T>(string value, CultureInfo culture = null)
        {
            if (culture == null)
            {
                culture = CultureInfo.InvariantCulture;
            }

            Type type = typeof(T);

            IQueryParamConverter converter = QueryTypeDescriptor.GetConverter(type);

            if (converter == null && Nullable.GetUnderlyingType(type) is Type underlyingType)
            {
                type      = underlyingType;
                converter = QueryTypeDescriptor.GetConverter(type);
            }

            try
            {
                // ReSharper disable once AssignNullToNotNullAttribute
                return((T)converter.ConvertFrom(culture, HttpUtility.UrlDecode(value), type));
            }
            catch
            {
                // Return the default value
                return(default(T));
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GenericListTypeConverter{T}"/> class.
        /// </summary>
        /// <exception cref="InvalidOperationException">
        /// Thrown if no converter exists for the given type.
        /// </exception>
        public GenericListTypeConverter()
        {
            Type type = typeof(T);

            this.typeConverter = QueryTypeDescriptor.GetConverter(type);
            if (this.typeConverter == null)
            {
                throw new InvalidOperationException("No type converter exists for type " + type.FullName);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Parses the given string value converting it to the given type.
        /// </summary>
        /// <param name="type">
        /// The <see cref="Type"/> to convert the string to.
        /// </param>
        /// <param name="value">
        /// The <see cref="string"/> value to parse.
        /// </param>
        /// <param name="culture">
        /// The <see cref="CultureInfo"/> to use as the current culture.
        /// <remarks>If not set will parse using <see cref="CultureInfo.InvariantCulture"/></remarks>
        /// </param>
        /// <returns>
        /// The <see cref="object"/>.
        /// </returns>
        public object ParseValue(Type type, string value, CultureInfo culture = null)
        {
            if (culture == null)
            {
                culture = CultureInfo.InvariantCulture;
            }

            IQueryParamConverter converter = QueryTypeDescriptor.GetConverter(type);

            try
            {
                // ReSharper disable once AssignNullToNotNullAttribute
                return(converter.ConvertFrom(culture, HttpUtility.UrlDecode(value), type));
            }
            catch
            {
                // Return the default value
                return(TypeDefaultsCache.GetOrAdd(type, t => this.GetDefaultValue(type)));
            }
        }