Ejemplo n.º 1
0
        public override KeyValuePair <Type, object> ReadJson(JsonReader reader, Type objectType, KeyValuePair <Type, object> existingValue, bool hasExistingValue,
                                                             JsonSerializer serializer)
        {
            var kvpConv = new KeyValuePairConverter();

            var obj = kvpConv.ReadJson(reader, objectType, existingValue, serializer);

            if (obj is null)
            {
                return(default(KeyValuePair <Type, object>));
            }

            var(key, value) = (KeyValuePair <Type, object>)obj;

            if (value is IConvertible)
            {
                return(new KeyValuePair <Type, object>(key, Convert.ChangeType(value, key)));
            }
            else if (value is JArray jarr)
            {
                var arr = jarr.Select(jv => Convert.ChangeType(jv, key.GetElementType())).ToArray();
                return(new KeyValuePair <Type, object>(key, arr));
            }

            return(new KeyValuePair <Type, object>(key, value));
        }
        public void CannotConvertNotKvpToKvp()
        {
            var converterChooserMock = new Mock <ISettingsConverterChooser>();
            var converter            = new KeyValuePairConverter(converterChooserMock.Object);

            var canConvert = converter.CanConvert(typeof(object), typeof(KeyValuePair <string, object>));

            Assert.IsFalse(canConvert);
        }
        public void CanConvertKvpToKvp()
        {
            var converterChooserMock = new Mock <ISettingsConverterChooser>();
            var converter            = new KeyValuePairConverter(converterChooserMock.Object);

            var canConvert = converter.CanConvert(typeof(KeyValuePair <int, double>), typeof(KeyValuePair <string, object>));

            Assert.IsTrue(canConvert);
        }
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            var converter  = new KeyValuePairConverter();
            var dict       = (ConcurrentDictionarySafe <TKey, TValue>)value;
            var enumerator = dict.GetEnumerator();

            writer.WriteStartArray();
            while (enumerator.MoveNext())
            {
                var entry = enumerator.Current;
                converter.WriteJson(writer, entry, serializer);
            }
            writer.WriteEndArray();
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var result = existingValue as ConcurrentDictionarySafe <TKey, TValue> ?? (objectType == _targetType ? new ConcurrentDictionarySafe <TKey, TValue>() : (ConcurrentDictionarySafe <TKey, TValue>)Activator.CreateInstance(objectType));

            var entryType = typeof(KeyValuePair <TKey, TValue>);
            var converter = new KeyValuePairConverter();

            reader.Read();
            while (reader.TokenType == JsonToken.StartObject)
            {
                var entry = (KeyValuePair <TKey, TValue>)converter.ReadJson(reader, entryType, null, serializer);
                result.AddOrUpdate(entry.Key, entry.Value, (key, value) => default(TValue));
                reader.Read();
            }
            return(result);
        }
        public void ShouldCallConverterChooserWithKeyAndValueAndReturnCreatedKvp()
        {
            var obj = new object();
            var converterChooserMock = new Mock <ISettingsConverterChooser>();

            converterChooserMock.Setup(x => x.ChooseAndConvert <string, object>(It.IsAny <string>())).Returns(obj);
            converterChooserMock.Setup(x => x.ChooseAndConvert <int, double>(It.IsAny <int>())).Returns(-1.1);

            var exprectedKvp = new KeyValuePair <object, double>(obj, -1.1);
            var converter    = new KeyValuePairConverter(converterChooserMock.Object);
            var rawValue     = new KeyValuePair <string, int>("test", 1);

            var convertedKvp = converter.Convert <KeyValuePair <string, int>, KeyValuePair <object, double> >(rawValue);

            converterChooserMock.Verify(x => x.ChooseAndConvert <string, object>(rawValue.Key), Times.Once);
            converterChooserMock.Verify(x => x.ChooseAndConvert <int, double>(rawValue.Value), Times.Once);
            Assert.AreEqual(exprectedKvp, convertedKvp);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Converts the given object into a query parameter string
        /// </summary>
        /// <param name="parameters">A list of parameters to convert to a query string.
        /// All objects must be of types that are supported by the JsonQueryStringConverter class.</param>
        /// <returns>The query string</returns>
        private static string ConvertQueryParametersToQueryString(Dictionary <string, object> parameters)
        {
            if (parameters == null)
            {
                return(String.Empty);
            }

            // Build the query parameter string
            var  converter   = new KeyValuePairConverter();
            var  queryString = new StringBuilder();
            bool isFirstItem = true;

            foreach (KeyValuePair <string, object> parameter in parameters)
            {
                if (isFirstItem == true)
                {
                    queryString.Append("?");
                    isFirstItem = false;
                }
                else
                {
                    queryString.Append("&");
                }
                queryString.Append(parameter.Key);
                queryString.Append("=");

                // Handle the "esp_type" parameter separately as it must be sent without quotations "" around the value
                if (parameter.Key == "esp_type")
                {
                    queryString.Append(parameter.Value.ToString());
                }
                else if (converter.CanConvert(parameter.GetType()))
                {
                    queryString.Append(JsonConvert.ToString(parameter.Value));
                }
            }
            return(queryString.ToString());
        }
Ejemplo n.º 8
0
        public override void WriteJson(JsonWriter writer, KeyValuePair <Type, object> value, JsonSerializer serializer)
        {
            var kvpConv = new KeyValuePairConverter();

            kvpConv.WriteJson(writer, value, serializer);
        }