RestSharp 自定义 IDeserialize return 通用类型
RestSharp custom IDeserialize return generic type
我想通过实现 RestSharp.Portable.Deserializers.IDeserialize
接口来编写自定义解串器 class:
public class EnrollmentDeserializer : IDeserializer
{
public T Deserialize<T> (IRestResponse response)
{
if (response.IsSuccess)
{
IList<Enrollment> enrollments = new List<Enrollments>();
// parsing JObjects and JTokens into list of enrollments
return (T)enrollments;
}
throw new Exception(response.StatusCode + ": can't get enrollments");
}
}
我的问题是关于泛型的 T
。如何在不强制转换的情况下将 T
定义为 return IList<Enrollment>
?
我尝试了“where T : List<Enrollment>
”或“where T : class
”,但其中 none 个有效。
您试图错误地使用泛型。目的是为 "any"(或许多)类型重用同一段代码。
对于您的情况,您可以扩展默认实现。然后,如果类型是您想要的类型,请使用您的实现。如果没有,调用基本方法。
希望我帮到了你。
我想通过实现 RestSharp.Portable.Deserializers.IDeserialize
接口来编写自定义解串器 class:
public class EnrollmentDeserializer : IDeserializer
{
public T Deserialize<T> (IRestResponse response)
{
if (response.IsSuccess)
{
IList<Enrollment> enrollments = new List<Enrollments>();
// parsing JObjects and JTokens into list of enrollments
return (T)enrollments;
}
throw new Exception(response.StatusCode + ": can't get enrollments");
}
}
我的问题是关于泛型的 T
。如何在不强制转换的情况下将 T
定义为 return IList<Enrollment>
?
我尝试了“where T : List<Enrollment>
”或“where T : class
”,但其中 none 个有效。
您试图错误地使用泛型。目的是为 "any"(或许多)类型重用同一段代码。
对于您的情况,您可以扩展默认实现。然后,如果类型是您想要的类型,请使用您的实现。如果没有,调用基本方法。
希望我帮到了你。