我有一個接口聲明通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