protected StockData RequestData(JObject json, string timeSeriesKey) { bool containAllKeys = json.ContainsKey(META_DATA) && json.ContainsKey(timeSeriesKey); if (!containAllKeys) { log.WarnFormat("{0} or {1} keys are missing in the resulting JSON", META_DATA, timeSeriesKey); return(null); } var metaData = (JObject)json.GetValue(META_DATA); var timeSeries = json.GetValue(timeSeriesKey); string symbol = GetValue(metaData, SYMBOL_KEY); if (string.IsNullOrEmpty(symbol)) { log.WarnFormat("Missing symbol (key is {0})", SYMBOL_KEY); return(null); } StockData stockData = new StockData(symbol); foreach (var data in timeSeries.Children <JProperty>()) { if (!(data.Value is JObject)) { continue; } JObject jdata = (JObject)(data.Value); try { DateTime dateTime = DateTime.ParseExact(data.Name, AV_DATE_FORMAT, CultureInfo.InvariantCulture); var open = GetDoubleValue(jdata, OPEN_KEY); var high = GetDoubleValue(jdata, HIGH_KEY); var low = GetDoubleValue(jdata, LOW_KEY); var close = GetDoubleValue(jdata, CLOSE_KEY); var volume = GetLongValue(jdata, VOLUME_KEY); StockDataItem dataItem = new StockDataItem(dateTime) { Open = open, High = high, Low = low, Close = close, Volume = volume }; stockData.AddDataItem(dataItem); } catch (Exception e) { log.ErrorFormat("Exception when parsing json data {0}", e.StackTrace); } } // end foreach return(stockData); }