这不可能。
这是工作代码:
HttpResponseMessage playerResponse = await client.GetAsync("2018/export?TYPE=players&DETAILS=1&SINCE=&PLAYERS=9988%2C13604&JSON=1");
if (playerResponse.IsSuccessStatusCode)
{
var json = await playerResponse.Content.ReadAsStringAsync();
var o = JsonConvert.DeserializeObject<MFLPlayerAPIResult>(json);
playerList = o.PlayerData.MflPlayers.ToList();
}
问题是我有很多类似于MFLPlayerAPIResult
的模型,就像上面的代码一样,它们都使用不同的请求字符串。我正在尝试构建这样的功能:
private async Task<Object> CreateListFromJson(Type jsonclass, string request, HttpClient client)
{
HttpResponseMessage response = await client.GetAsync(request);
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
var o = JsonConvert.DeserializeObject<jsonclass>(json);
return (o);
}
return (null);
}
其中返回的Object
与参数中使用的Type jsonclass
的模型相同,那么我可以使用如下函数:
playerList = CreateListFromJson(MFLPlayerAPIResult, request, client).PlayerData.MflPlayers.ToList();
并与不同的请求字符串和模型类型一起多次使用它。
这可能吗?
答案 0 :(得分:3)
如果您提前知道类型,则可以像这样输入通用参数:
private async Task<T> CreateListFromJson<T>(string request, HttpClient client)
where T: class
{
var myObj = JsonConvert.DeserializeObject<T>(item);
//...
}
如果直到编译时才知道类型,则可以在运行时通过传递类型来调用反序列化
private async Task<Object> CreateListFromJson(Type jsonclass, string request, HttpClient client)
{
var myObj = JsonConvert.DeserializeObject(item, jsonclass);
//...
}