コード例 #1
0
 private string ConvertValue(IQueryStringConverter converter, object value)
 {
     if (!converter.CanConvert(value.GetType()))
     {
         throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Cannot convert type {0} using {1}.",
                                                           value.GetType().FullName, converter.GetType().FullName));
     }
     return(converter.Convert(value));
 }
コード例 #2
0
 private string[] ConvertValue(IQueryStringConverter converter, object value)
 {
     if (!converter.CanConvert(value.GetType()))
     {
         throw new InvalidOperationException(
                   $"Cannot convert type {value.GetType().FullName} using {converter.GetType().FullName}.");
     }
     return(converter.Convert(value));
 }
コード例 #3
0
        public IDictionary <string, string> GetKeyValuePairs()
        {
            Dictionary <string, string> queryParameters = new Dictionary <string, string>();

            foreach (var pair in this.AttributedPublicProperties)
            {
                PropertyInfo property = pair.Item1;
                QueryStringParameterAttribute attribute = pair.Item2;
                object value = property.GetValue(this.Object, null);

                // 'Required' check
                if (attribute.IsRequired && value == null)
                {
                    string propertyFullName = string.Format(CultureInfo.InvariantCulture, "{0}.{1}", property.GetType().FullName, property.Name);
                    throw new ArgumentException("Got null/unset value for a required query parameter.", propertyFullName);
                }

                // Serialize
                if (value != null)
                {
                    string keyStr = attribute.Name;
                    string valueStr;
                    if (attribute.ConverterType == null)
                    {
                        valueStr = value.ToString();
                    }
                    else
                    {
                        IQueryStringConverter converter = this.QueryStringConverterInstanceFactory.GetConverterInstance(attribute.ConverterType);
                        valueStr = this.ConvertValue(converter, value);

                        if (converter.ChangesKey())
                        {
                            keyStr = converter.GetKey(value);
                        }

                        if (valueStr == null)
                        {
                            throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture,
                                                                              "Got null from value converter '{0}'", attribute.ConverterType.FullName));
                        }
                    }

                    queryParameters[keyStr] = valueStr;
                }
            }

            return(queryParameters);
        }
コード例 #4
0
        public IQueryStringConverter GetConverterInstance(Type t)
        {
            IQueryStringConverter cached = GetCachedInstance(t);

            if (cached != null)
            {
                return(cached);
            }

            // Create new instance
            var instance = InitializeConverter(t);

            // Cache the instance
            CacheInstance(t, instance);
            return(instance);
        }
コード例 #5
0
        public IDictionary <string, string[]> GetKeyValuePairs()
        {
            Dictionary <string, string[]> queryParameters = new Dictionary <string, string[]>();

            foreach (var pair in this.AttributedPublicProperties)
            {
                PropertyInfo property = pair.Item1;
                QueryStringParameterAttribute attribute = pair.Item2;
                object value = property.GetValue(this.Object, null);

                // 'Required' check
                if (attribute.IsRequired && value == null)
                {
                    string propertyFullName = $"{property.GetType().FullName}.{property.Name}";
                    throw new ArgumentException("Got null/unset value for a required query parameter.", propertyFullName);
                }

                // Serialize
                if (attribute.IsRequired || !IsDefaultOfType(value))
                {
                    string   keyStr = attribute.Name;
                    string[] valueStr;
                    if (attribute.ConverterType == null)
                    {
                        valueStr = new[] { value.ToString() };
                    }
                    else
                    {
                        IQueryStringConverter converter = this.QueryStringConverterInstanceFactory.GetConverterInstance(attribute.ConverterType);
                        valueStr = this.ConvertValue(converter, value);

                        if (valueStr == null)
                        {
                            throw new InvalidOperationException($"Got null from value converter '{attribute.ConverterType.FullName}'");
                        }
                    }

                    queryParameters[keyStr] = valueStr;
                }
            }

            return(queryParameters);
        }
コード例 #6
0
 private static void CacheInstance(Type t, IQueryStringConverter instance)
 {
     ConverterInstanceRegistry[t] = instance;
 }
コード例 #7
0
 private static void CacheInstance(Type t, IQueryStringConverter instance)
 {
     ConverterInstanceRegistry[t] = instance;
 }