public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { SwitcheoPricesList pricesList = new SwitcheoPricesList(); if (reader.TokenType == JsonToken.StartObject) { JObject rootObject = JObject.Load(reader); List <SwitcheoPrice> prices = new List <SwitcheoPrice>(); foreach (var assetPrices in rootObject) { foreach (JProperty subAssetPrice in assetPrices.Value) { SwitcheoPrice switcheoPrice = new SwitcheoPrice() { Pair = $"{assetPrices.Key}{SwitcheoHelpers.PairSeparator}{subAssetPrice.Name}", Price = (decimal)subAssetPrice.Value }; prices.Add(switcheoPrice); } } pricesList.Prices = prices.ToArray(); } return(pricesList); }
public void GetLastPrices_Should_RespondWithLastPricesArray() { // arrange var expected = new SwitcheoPricesList() { Prices = new SwitcheoPrice[] { new SwitcheoPrice() { Pair = "GAS_NEO", Price = 0.1m }, new SwitcheoPrice() { Pair = "SWTH_NEO", Price = 0.00050369m }, new SwitcheoPrice() { Pair = "SWTH_GAS", Price = 0.06052445m } } }; var client = PrepareClient(JsonConvert.SerializeObject(expected)); // act var result = client.GetLastPrices(new string[] { "GAS", "SWTH" }); // assert Assert.AreEqual(true, result.Success); Assert.IsTrue(Compare.PublicInstancePropertiesEqual(expected.Prices[0], result.Data.Prices[0])); Assert.IsTrue(Compare.PublicInstancePropertiesEqual(expected.Prices[1], result.Data.Prices[1])); Assert.IsTrue(Compare.PublicInstancePropertiesEqual(expected.Prices[2], result.Data.Prices[2])); }
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteStartObject(); SwitcheoPricesList pricesList = (SwitcheoPricesList)value; if (pricesList != null && pricesList.Prices != null && pricesList.Prices.Length > 0) { Dictionary <string, List <KeyValuePair <string, decimal> > > groupedAssetsPrices = new Dictionary <string, List <KeyValuePair <string, decimal> > >(); foreach (SwitcheoPrice switcheoPrice in pricesList.Prices) { string fromAsset = switcheoPrice.Pair.GetOfferAsset(); var toAssetInformations = new KeyValuePair <string, decimal>(switcheoPrice.Pair.GetWantAsset(), switcheoPrice.Price); if (!groupedAssetsPrices.ContainsKey(fromAsset)) { groupedAssetsPrices.Add(fromAsset, new List <KeyValuePair <string, decimal> >()); } groupedAssetsPrices[fromAsset].Add(toAssetInformations); } foreach (var assetPrices in groupedAssetsPrices) { writer.WritePropertyName(assetPrices.Key); writer.WriteStartObject(); foreach (var subAssetPrice in assetPrices.Value) { writer.WritePropertyName(subAssetPrice.Key); writer.WriteValue(subAssetPrice.Value); } writer.WriteEndObject(); } } writer.WriteEndObject(); }