我有一个函数来反序列化我从Api获得的任何类型的对象。 如果有错误,我想返回一个T类型的新对象。
我尝试用return new T()
来做,但我收到错误:
'T'必须是具有公共无参数的非抽象类型 构造函数,以便在泛型类型中使用它作为参数'T' 方法
我的代码出了什么问题?
[SuppressMessage("Microsoft.Usage", "CA2202:Do not dispose objects multiple times")]
internal static T DeserializeObject<T>(this JsonSerializer serializer, string value)
{
try
{
using (var stringReader = new StringReader(value))
{
using (var jsonTextReader = new JsonTextReader(stringReader))
{
return (T)serializer.Deserialize(jsonTextReader, typeof(T));
}
}
}
catch {
return GetDefault<T>(); //This line returns the error
}
}
public static T GetDefault<T>() where T : new()
{
if (typeof(IEnumerable).IsAssignableFrom(typeof(T)))
{
return new T();
}
return default(T);
}
答案 0 :(得分:3)
在DeserializeObject<T>
你正在打电话
GetDefault<T>()
具有类型参数约束where T : new()
,但DeserializeObject<T>
的{{1}}不受约束。您还必须将约束添加到T
:
DeserializeObject<T>