我具有解析json响应的通用方法,但是当我尝试在我的方法中调用它时,我收到一个错误“ Type TOut必须是引用类型,才能将其用作通用中的参数T方法类型”。请帮忙,让我知道如何调用通用方法。
private static T TryParse<T>(string input, T defaultVal = default(T)) where T : class
{
try
{
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(input);
return result;
}
catch (Exception)
{
return defaultVal;
}
}
public async Task<Tuple<bool, string, TOut>> GetAsync<TOut>(
Func<string, bool> successTest = null,
Dictionary<string, string> parameters = null)
{
var result = await GetAsync(parameters);
var response = await GetResponseContentAsync(result.Content);
var responseObj = TryParse<TOut>(response);
return Tuple.Create(true, response, responseObj);
}
答案 0 :(得分:3)
您的TryParse<T>
方法说T
必须是一个类(where T : class
)。您的GetAsync<TOut>
方法使T
成为任何东西-对此没有限制。
但是,调用TOut
时T
用作TryParse
。这就是问题所在-TOut
可以是任何东西,但是T
只能是一个类。
从where T : class
中删除TryParse
限制,或将其添加到GetAsync
(where TOut : class
)中。您要做什么取决于您的要求。