You need to specify the data type that List is expected to contain, either by modeling it as an object:
using Newtonsoft.Json;
var input = "[[{\"BillRateCardId\":6992,\"ExternalRateCardId\":\"cd77d9b5-a00e-4696\"}]]";
var deserialized = JsonConvert.DeserializeObject<List<List<ResponseModel>>>(input);
class ResponseModel
{
public int BillRateCardId { get; set; }
public string? ExternalRateCardId { get; set; }
}
or by using dynamic, but then you lose static type checking:
using Newtonsoft.Json;
var input = "[[{\"BillRateCardId\":6992,\"ExternalRateCardId\":\"cd77d9b5-a00e-4696\"}]]";
var deserialized = JsonConvert.DeserializeObject<List<List<dynamic>>>(input);
Console.WriteLine(JsonConvert.SerializeObject(deserialized));