private void EnrichWithMetadata(JProperty metadataJson, TechIndicatorSeries timeSeries) { var metadatas = metadataJson.Children().Single(); foreach (var metadataItem in metadatas) { var metadataProperty = (JProperty)metadataItem; var metadataItemName = metadataProperty.Name; var metadataItemValue = metadataProperty.Value.ToString(); switch (metadataItemName) { case TechIndicatorJsonTokens.SymbolToken: timeSeries.Symbol = metadataItemValue; break; case TechIndicatorJsonTokens.IndicatorToken: timeSeries.Indicator = metadataItemValue; break; case TechIndicatorJsonTokens.IntervalToken: timeSeries.Interval = GetInterval(metadataItemValue); break; case TechIndicatorJsonTokens.LastRefreshedToken: timeSeries.LastRefreshed = DateTime.Parse(metadataItemValue); break; case TechIndicatorJsonTokens.TimePeriodToken: timeSeries.TimePeriod = int.Parse(metadataItemValue, CultureInfo.InvariantCulture); break; case TechIndicatorJsonTokens.TimeZoneToken: timeSeries.TimeZone = metadataItemValue; break; } } }
public TechIndicatorSeries ParseTechIndicatorSeries(JObject jObject) { if (jObject == null) { throw new ArgumentNullException(nameof(jObject)); } try { var properties = jObject.Children().Select(ch => (JProperty)ch).ToArray(); var metadataJson = properties.FirstOrDefault(p => p.Name == MetaDataJsonTokens.MetaDataHeader); var timeSeriesJson = properties.FirstOrDefault(p => p.Name.Contains(TechIndicatorJsonTokens.TechIndicatorHeader)); if (metadataJson == null || timeSeriesJson == null) { throw new StocksParsingException("Unable to parse Technical Indicator json"); } var result = new TechIndicatorSeries(); EnrichWithMetadata(metadataJson, result); result.DataPoints = GetTechIndicatorDataPoints(timeSeriesJson); return(result); } catch (StocksParsingException) { throw; } catch (Exception ex) { throw new StocksParsingException("Unable to parse data. See the inner exception for details", ex); } }