我有一个接口声明通C#泛型类型作为参数
public interface ISomething<T> where T : class
和地方在界面我有一个成员声明为
[JsonProperty("someProperty")]
[JsonConverter(typeof(ConcreteTypeConverter<List<T>>))]
List<T> SomePropertyList{ get; set; }
我得到ConcreteTypeConverter<List<T>>
一个错误说,它不能使用类型(T)作为参数。我的ConcreteTypeConverter类接受一个T类型并返回一个T的具体实现,这是JSON反序列化所需要的。这里的场景是T可以有大约20种不同的类型。但是我想避免有20个这样的接口 - 这就是为什么我选择一个通用的接口。
用法会是这样的
ISomething<SomeType> variable = new Something<SomeType>();
var list = variable.SomePropertyList;
其中SOMETYPE是T的实际执行有什么办法在这种情况下使用泛型?
我ConcreteConverterClass从JsonConverter派生(使用Newtonsoft.Json):
public class ConcreteTypeConverter<TConcrete> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return true;
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return serializer.Deserialize<TConcrete>(reader);
}
}
我确切的错误是:
Attribute Argument cannot use type parameters
所以你的问题是泛型类型作为一个属性?你可以粘贴你的ConcreteTypeConverter代码(只是类def)。 – 2013-03-20 10:01:51
另外,确切的错误输出将会很有用。 – 2013-03-20 10:22:59
编辑添加额外信息的问题。是的,基本上我会将简历问题发送到“我可以发送泛型类型T作为属性吗?” – drl 2013-03-20 11:28:19