У меня есть функция для десериализации любого типа объекта, который я получаю от 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);
}