예제 #1
0
        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);
        }
예제 #2
0
        // 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);
        }