У меня в принципе есть что-то вроде этого:
void Foo(Type ty)
{
var result = serializer.Deserialize<ty>(inputContent);
}
Foo(typeof(Person));
Deserialize<ty>
не работает, потому что вместо этого ожидается Deserialize<Person>
. Как мне обойти это?
Я также хотел бы понять, как работают дженерики и почему он не принимает ty
, что typeof(Person)
.
РЕДАКТИРОВАТЬ: Я должен был упомянуть, что это надуманный пример. Я не могу изменить сигнатуру функции, потому что она реализует интерфейс.
РЕДАКТИРОВАТЬ: сериализатор является JavascriptSerializer и реализован здесь как фильтр действий. Это называется так:
[JsonFilter(Param="test", JsonDataType=typeof(Person))]
Решение
На основании ответов Марка и Антона:
var result = typeof(JavaScriptSerializer).GetMethod("Deserialize")
.MakeGenericMethod(JsonDataType)
.Invoke(serializer, new object[] { inputContent });