API response json to C# object So I got kind of a weird format returned from the api I'm calling it's the following:
[
    [
        1609065000000,
        &quot;22739.71000000&quot;,
        &quot;22795.73000000&quot;,
        &quot;22700.39000000&quot;,
        &quot;22779.08000000&quot;,
        &quot;38.81782800&quot;,
        1609065899999,
        &quot;883167.94526884&quot;,
        2261,
        &quot;18.58965200&quot;,
        &quot;423036.58181400&quot;,
        &quot;0&quot;
    ]
]

    public static class StringExtensions
    {
        public static IEnumerable&lt;Candlestick&gt; ToCandleStickList(this string jsonObject)
        {
            var candleStickList = new List&lt;Candlestick&gt;();
            var list = JsonConvert.DeserializeObject&lt;List&lt;object[]&gt;&gt;(jsonObject);
            foreach (var obj in list)
            {
                candleStickList.Add(new Candlestick
                {
                    OpenTime = (long)obj[0],
                    Open = double.Parse((string)obj[1]),
                    High = double.Parse((string)obj[2]),
                    Low = double.Parse((string)obj[3]),
                    Close = double.Parse((string)obj[4]),
                    Volume = double.Parse((string)obj[5]),
                    CloseTime = (long)obj[6],
                    QuoteAssetVolume = double.Parse((string)obj[7]),
                    NumberOfTrades = (long)obj[8],
                    TakerBuyBaseAssetVolume = double.Parse((string)obj[9]),
                    TakerBuyQuoteAssetVolume = double.Parse((string)obj[10])
                });
            }

            return candleStickList;
        }
    }

    public class Candlestick
    {
        public long OpenTime { get; set; }
        public double Open { get; set; }
        public double High { get; set; }
        public double Low { get; set; }
        public double Close { get; set; }
        public double Volume { get; set; }
        public long CloseTime { get; set; }
        public double QuoteAssetVolume { get; set; }
        public long NumberOfTrades { get; set; }
        public double TakerBuyBaseAssetVolume { get; set; }
        public double TakerBuyQuoteAssetVolume { get; set; }
    }

I use the static method as follows
public async Task&lt;IEnumerable&lt;Candlestick&gt;&gt; GetCandleSticks(string symbol, string interval)
        {
            var endpoint = $&quot;api/v3/klines?symbol={symbol}&amp;interval={interval}&quot;;
            var response = await _httpClient.GetAsync(endpoint);

            if (response.IsSuccessStatusCode)
            {
                var result = (await response.Content.ReadAsStringAsync()).ToCandleStickList();

                return result;
            }

            throw new Exception($&quot;&quot;);
        }

Does anyone got any suggestions for better code? Thanks in advance!
Json.NET has a very useful JsonConverter which you can use to add a custom JsonConverter. Which what you actually need.
So, you can do something like this :
public class CandlestickConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(Candlestick);
    }

    public override object ReadJson(JsonReader reader , Type objectType , object existingValue , JsonSerializer serializer)
    {
        if(reader.TokenType == JsonToken.Null)
        {
            return null;
        }

        var candle = ( existingValue as Candlestick ?? new Candlestick() );

        var array = JArray.Load(reader);

        candle.OpenTime = array.ElementAtOrDefault(0)?.ToObject&lt;long&gt;(serializer) ?? 0;
        candle.Open = array.ElementAtOrDefault(1)?.ToObject&lt;double&gt;(serializer) ?? 0;
        candle.High = array.ElementAtOrDefault(2)?.ToObject&lt;double&gt;(serializer) ?? 0;
        candle.Low = array.ElementAtOrDefault(3)?.ToObject&lt;double&gt;(serializer) ?? 0;
        candle.Close = array.ElementAtOrDefault(4)?.ToObject&lt;double&gt;(serializer) ?? 0;
        candle.Volume = array.ElementAtOrDefault(5)?.ToObject&lt;double&gt;(serializer) ?? 0;
        candle.CloseTime = array.ElementAtOrDefault(6)?.ToObject&lt;long&gt;(serializer) ?? 0;
        candle.QuoteAssetVolume = array.ElementAtOrDefault(7)?.ToObject&lt;double&gt;(serializer) ?? 0;
        candle.NumberOfTrades = array.ElementAtOrDefault(8)?.ToObject&lt;long&gt;(serializer) ?? 0;
        candle.TakerBuyBaseAssetVolume = array.ElementAtOrDefault(9)?.ToObject&lt;double&gt;(serializer) ?? 0;
        candle.TakerBuyQuoteAssetVolume = array.ElementAtOrDefault(10)?.ToObject&lt;double&gt;(serializer) ?? 0;

        return candle;
    }

    public override void WriteJson(JsonWriter writer , object value , JsonSerializer serializer)
    {
        var candle = (Candlestick) value;
        serializer.Serialize(writer ,
            new[]
            {
                candle.OpenTime,
                candle.Open,
                candle.High,
                candle.Low,
                candle.Close,
                candle.Volume,
                candle.CloseTime,
                candle.QuoteAssetVolume,
                candle.NumberOfTrades,
                candle.TakerBuyBaseAssetVolume,
                candle.TakerBuyQuoteAssetVolume
            });
    }
}

Now, using this custom converter you can use the JsonConverter attribute on the class like this :
[JsonConverter(typeof(CandlestickConverter))]
public class Candlestick
{
    ...
}

Now you can do this directly :
var candles = JsonConvert.DeserializeObject&lt;List&lt;Candlestick&gt;&gt;(jsonObject);

So, you don't need to use extensions, you only need to do a custom converter which is the proper way to handle Json serialization when using Json.NET.