我有一个接口声明为
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 并返回 JSON 反序列化所需的 T 的具体实现。这里的场景是 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