У меня есть универсальный метод:Как вывести тип аргумента при вызове общего метода?
public static DataTable ToDataTable<T>(List<T> data)
И я пытаюсь сделать вызов к нему, выполнив:
var myVar= JsonConvert.DeserializeObject<LeagueFixtures>(url);
DataTable myDataTable = ToDataTable(myVar);
Однако я получаю ошибку «Типы аргументов не могут быть выведены из Попробуйте указать аргументы типа конкретно. " в строке, где я вызываю ToDataTable.
Структура класса LeagueFixtures является:
public class Fixtures
{
public string leagueName { get; set; }
public List<LeagueFixtures> fixtures { get; set; }
}
public class LeagueFixtures
{
public string date { get; set; }
public int matchday { get; set; }
public FixtureResult result { get; set; }
}
public class FixtureResult
{
public int goalsHome { get; set; }
public int goalsAway { get; set; }
}
Я мог заставить его работать, если я сделал:
var myVar= JsonConvert.DeserializeObject<Fixtures>(url);
DataTable myDataTable = ToDataTable(myVar.fixtures);
, но я не мог получить доступ к результату, делая myVar.fixtures. результат, тогда как при переходе непосредственно в LeagueFixtures я могу получить доступ к результату.
Я понял все до последнее предложение. Кроме того, DeserializeObject возвращает T, он не возвращает List, поэтому вы не можете ожидать, что он будет назначен ему. –
Euphoric
'ToDataTable' ожидает список, но' myVar' является 'LeagueFixtures'. Параметр типа generic не будет устранять эту проблему. Если вы хотите вызвать 'ToDataTable', вам нужно передать ему список. Я не понимаю твое последнее предложение. В чем проблема с 'myVar.fixtures'? Это похоже на то, что вы хотите. – recursive
LeagueFixtures не является списком, где в качестве Fixtures.fixtures - это список . Вы не можете пройти в LeagueFixtures в качестве аргумента для чего-то желающего List . Что конкретно в ваших данных JSON? –