internal Huobi.ApiResult <IList <Huobi.Kline> > DeserializeMarketSummaries(string json) { return(JsonConvert.DeserializeObject <Huobi.ApiResult <IList <Huobi.Kline> > >(json)); // status: "string" // data: [] var result = new Huobi.ApiResult <IList <Huobi.Kline> >(); var sw = Stopwatch.StartNew(); JsonTextReader reader = new JsonTextReader(new StringReader(json)); while (reader.Read() && reader.TokenType != JsonToken.StartObject) { ; } while (reader.Read() && reader.TokenType == JsonToken.PropertyName) { switch (reader.Value) { case "status": // string result.status = reader.ReadAsString(); break; case "data": // array if (reader.Read() && reader.TokenType == JsonToken.StartArray) { var arr = new List <Huobi.Kline>(); while (reader.Read() && reader.TokenType == JsonToken.StartObject) { var m = new Huobi.Kline(); while (reader.Read() && reader.TokenType != JsonToken.EndObject) { switch (reader.Value) { case "low": m.low = reader.ReadAsDecimal().GetValueOrDefault(); break; case "high": m.high = reader.ReadAsDecimal().GetValueOrDefault(); break; case "open": m.open = reader.ReadAsDecimal().GetValueOrDefault(); break; case "close": m.close = reader.ReadAsDecimal().GetValueOrDefault(); break; case "amount": m.amount = reader.ReadAsDecimal().GetValueOrDefault(); break; case "vol": m.vol = reader.ReadAsDecimal().GetValueOrDefault(); break; case "count": m.count = reader.ReadAsInt32().GetValueOrDefault(); break; case "symbol": m.symbol = reader.ReadAsString(); break; default: reader.Read(); // skip unknown tags break; } } arr.Add(m); } if (reader.TokenType == JsonToken.EndArray) { result.data = arr; } } break; case "ts": // timestamp: long reader.Read(); break; case "err-code": result.errCode = reader.ReadAsString(); break; case "err-msg": result.errMsg = reader.ReadAsString(); break; default: reader.Read(); // skip break; } } if (reader.Read() && reader.TokenType != JsonToken.EndObject) { return(null); } Debug.Print($"Huobi tickers: took {sw.ElapsedMilliseconds}ms"); return(result); }
// v1/common/symbols internal Huobi.ApiResult <IList <Huobi.Market> > DeserializeMarkets(string json) { return(JsonConvert.DeserializeObject <Huobi.ApiResult <IList <Huobi.Market> > >(json)); var sw = Stopwatch.StartNew(); // status: "string" // data: [] var result = new Huobi.ApiResult <IList <Huobi.Market> >(); JsonTextReader reader = new JsonTextReader(new StringReader(json)); if (reader.Read() && reader.TokenType != JsonToken.StartObject) { return(null); } while (reader.Read() && reader.TokenType == JsonToken.PropertyName) { switch (reader.Value) { case "status": // string result.status = reader.ReadAsString(); break; case "data": // array if (reader.Read() && reader.TokenType == JsonToken.StartArray) { var arr = new List <Huobi.Market>(); while (reader.Read() && reader.TokenType == JsonToken.StartObject) { var m = new Huobi.Market(); while (reader.Read() && reader.TokenType != JsonToken.EndObject) { switch (reader.Value) { case "base-currency": m.baseCurrency = reader.ReadAsString(); break; case "quote-currency": m.quoteCurrency = reader.ReadAsString(); break; case "price-precision": m.pricePrecision = reader.ReadAsInt32().GetValueOrDefault(); break; case "amount-precision": m.amountPrecision = reader.ReadAsInt32().GetValueOrDefault(); break; case "symbol-partition": m.symbolPartition = reader.ReadAsString(); break; case "symbol": m.symbol = reader.ReadAsString(); break; default: reader.Read(); // skip unknown tags break; } } arr.Add(m); } if (reader.TokenType == JsonToken.EndArray) { result.data = arr; } } break; case "ts": // timestamp: long break; case "err-code": result.errCode = reader.ReadAsString(); break; case "err-msg": result.errMsg = reader.ReadAsString(); break; default: reader.Read(); // skip break; } } Debug.Print($"Huobi markets: took {sw.ElapsedMilliseconds}ms"); if (reader.Read() && reader.TokenType != JsonToken.EndObject) { return(null); } return(result); }