using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
internal static class Converter
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
DateParseHandling = DateParseHandling.None,
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
[JsonProperty("Meta Data")]
public MetaData MetaData { get; set; }
[JsonProperty("Weekly Adjusted Time Series")]
private JObject JWeeklyAdjustedTimeSeries { get; set; }
public IEnumerable<WeeklyAdjustedTime> WeeklyAdjustedTimeSeries { get; set; }
public static Welcome FromJson(string json)
var welcome = JsonConvert.DeserializeObject<Welcome>(json, Converter.Settings);
welcome.WeeklyAdjustedTimeSeries = welcome.JWeeklyAdjustedTimeSeries.ToObject<Dictionary<string, JObject>>().Select(x => {
var wat = x.Value.ToObject<WeeklyAdjustedTime>();
return new WeeklyAdjustedTime
AdjustedClose = wat.AdjustedClose,
DividendAmount = wat.DividendAmount
[JsonProperty("1. Information")]
public string Information { get; set; }
[JsonProperty("2. Symbol")]
public string Symbol { get; set; }
[JsonProperty("3. Last Refreshed")]
public DateTimeOffset LastRefreshed { get; set; }
[JsonProperty("4. Time Zone")]
public string TimeZone { get; set; }
public class WeeklyAdjustedTime
public string Date { get; set; }
[JsonProperty("1. open")]
public string Open { get; set; }
[JsonProperty("2. high")]
public string High { get; set; }
public string Low { get; set; }
[JsonProperty("4. close")]
public string Close { get; set; }
[JsonProperty("5. adjusted close")]
public string AdjustedClose { get; set; }
[JsonProperty("6. volume")]
public string Volume { get; set; }
[JsonProperty("7. dividend amount")]
public string DividendAmount { get; set; }
private const string json = @"{
""1. Information"": ""Weekly Adjusted Prices and Volumes"",
""3. Last Refreshed"": ""2018-06-13"",
""4. Time Zone"": ""US/Eastern""
""Weekly Adjusted Time Series"": {
""1. open"": ""101.3700"",
""2. high"": ""102.0100"",
""3. low"": ""100.5600"",
""4. close"": ""100.8500"",
""5. adjusted close"": ""100.8500"",
""6. volume"": ""70511616"",
""7. dividend amount"": ""0.0000""
""1. open"": ""101.2600"",
""2. high"": ""102.6900"",
""3. low"": ""100.3800"",
""4. close"": ""101.6300"",
""5. adjusted close"": ""101.6300"",
""6. volume"": ""122316267"",
""7. dividend amount"": ""0.0000""
""1. open"": ""97.8400"",
""2. high"": ""100.8600"",
""4. close"": ""100.7900"",
""5. adjusted close"": ""100.7900"",
""6. volume"": ""113626024"",
""7. dividend amount"": ""0.0000""
""1. open"": ""97.0000"",
""2. high"": ""98.9800"",
""4. close"": ""98.3600"",
""5. adjusted close"": ""98.3600"",
""6. volume"": ""101128083"",
""7. dividend amount"": ""0.0000""
public static void Main()
var welcome = Welcome.FromJson(json);
Console.WriteLine(welcome.MetaData.Information);
Console.WriteLine(welcome.WeeklyAdjustedTimeSeries.First().Date);
Console.WriteLine(welcome.WeeklyAdjustedTimeSeries.First().Open);