#c_sharp #net #ооп
Всем доброго времени суток. Может быть кто-то уже сталкивался с таким и может помочь?
public static class JSON
{
public static string Serialize_object_TO_JSON(this T Entity)
where T:ENT
{
return JsonConvert.SerializeObject(Entity);
}
}
Есть некий класс, который наследует ENT и передавать его в атрибуты можно. Дальше
мне пришлось переделать метод так, чтоб она работал с коллекциями:
public static class JSON
{
public static string Serialize_object_TO_JSON(this T Entity)
where T:List
{
return JsonConvert.SerializeObject(Entity);
}
}
После чего компилятор говорит, что ему не удалось привести тип класса, который наследуется
от ENT, к типу List.
P.S. Изначально задавать обобщение конечного класса я не могу, т.к. их довольно много,
именно по этому попытался делать через наследование.
Ответы
Ответ 1
Попробуйте так, если Вам это разрешает бизнес логика: public static class JSON { public static string Serialize_object_TO_JSON(this T Entity) where T : IEnumerable { return JsonConvert.SerializeObject(Entity); } } Дело в том что List - инвариантен. И все классы в .NET инвариантны. То есть это полное соответствие типов. Означает, что можно использовать только изначально заданный тип. Таким образом, параметр инвариантного универсального типа не является ни ковариантным, ни контравариантным. С другой стороны есть IEnumerable где тип-параметр T помечен как out - ковариантным. Позволяет использовать тип с большей глубиной наследования, чем задано изначально. Полное описание почему так +1 за хороший пример
Комментариев нет:
Отправить комментарий