using System.Collections.Generic;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
public static void Main()
""name"": ""Apple Inc."",
""primaryExch"": ""NGS"",
""figiuid"": ""EQ0010169500001000"",
""scfigi"": ""BBG001S5N8V8"",
""cfigi"": ""BBG000B9XRY4"",
""figi"": ""BBG000B9Y5X2""
""updated"": ""2019-01-15T05:21:28.437Z"",
""url"": ""https://api.polygon.io/v2/reference/tickers/AAPL""
""name"": ""United Arab Emirates dirham - Australian dollar"",
""updated"": ""2019-01-25T00:00:00.000Z"",
""currencyName"": ""Australian dollar"",
""baseName"": ""United Arab Emirates dirham"",
""url"": ""https://api.polygon.io/v2/tickers/$AEDAUD""
var list = JsonConvert.DeserializeObject<List<Ticker>>(json);
foreach (var ticker in list)
Console.WriteLine("Symbol: " + ticker.Symbol);
Console.WriteLine("Name: " + ticker.Name);
Console.WriteLine("Market: " + ticker.Market);
Console.WriteLine("Locale: " + ticker.Locale);
Console.WriteLine("Currency: " + ticker.Currency);
Console.WriteLine("Active: " + ticker.Active);
Console.WriteLine("Primary Exchange: " + ticker.PrimaryExch);
if (ticker is ForeignExchange)
var fx = (ForeignExchange)ticker;
Console.WriteLine("Base Currency: " + fx.BaseCurrency);
var stock = (Stock)ticker;
Console.WriteLine("CIK: " + stock.CIK);
Console.WriteLine("FIGIUID: " + stock.FIGIUID);
Console.WriteLine("SCFIGI: " + stock.SCFIGI);
Console.WriteLine("CFIGI: " + stock.CFIGI);
Console.WriteLine("FIGI: " + stock.FIGI);
[JsonConverter(typeof(TickerConverter))]
public string Symbol { get; set; }
public string Name { get; set; }
public MarketEnum Market { get; set; }
public LocaleEnum Locale { get; set; }
public CurrencyEnum Currency { get; set; }
public bool Active { get; set; }
public PrimaryExchEnum PrimaryExch { get; set; }
public DateTimeOffset Updated { get; set; }
public string Type { get; set; }
public string CIK { get; set; }
public string FIGIUID { get; set; }
public string SCFIGI { get; set; }
public string CFIGI { get; set; }
public string FIGI { get; set; }
class ForeignExchange : Ticker
public BaseCurrencyEnum BaseCurrency { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
enum MarketEnum { STOCKS, FX }
[JsonConverter(typeof(StringEnumConverter))]
enum LocaleEnum { US, G }
[JsonConverter(typeof(StringEnumConverter))]
enum CurrencyEnum { USD, AUD, EUR }
[JsonConverter(typeof(StringEnumConverter))]
enum PrimaryExchEnum { NGS, FX }
[JsonConverter(typeof(StringEnumConverter))]
enum BaseCurrencyEnum { AED }
class TickerConverter : JsonConverter
public override bool CanConvert(Type objectType)
return typeof(Ticker).IsAssignableFrom(objectType);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
JObject obj = JObject.Load(reader);
if (obj["market"].ToObject<MarketEnum>(serializer) == MarketEnum.FX)
ticker = new ForeignExchange();
childObj = (JObject)obj["attrs"];
childObj = (JObject)obj["codes"];
serializer.Populate(obj.CreateReader(), ticker);
serializer.Populate(childObj.CreateReader(), ticker);
public override bool CanWrite
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
throw new NotImplementedException();