我基本上有这样的事情:

void Foo(Type ty)
{
    var result = serializer.Deserialize<ty>(inputContent);
}

Foo(typeof(Person));
Deserialize<ty>无法正常工作,因为它需要Deserialize<Person>。我该如何解决?

我还想了解泛型如何工作以及为什么它不接受tytypeof(Person)

编辑:我应该提到这是一个人为的示例。我实际上不能更改该函数的签名,因为它实现了一个接口(interface)。

编辑:序列化器是一个JavascriptSerializer,并在此处实现为 Action 过滤器。因此,它被称为:
[JsonFilter(Param="test", JsonDataType=typeof(Person))]

解决方案

根据马克和安东的答案:
var result = typeof(JavaScriptSerializer).GetMethod("Deserialize")
                 .MakeGenericMethod(JsonDataType)
                 .Invoke(serializer, new object[] { inputContent });

最佳答案

如果ty在编译时是已知的,为什么不只是

void Foo<T>()
{
    var result = serializer.Deserialize<T>(inputContext);
}

除此以外,
MethodInfo genericDeserializeMethod = serializer.GetType().GetMethod("Deserialize");
MethodInfo closedDeserializeMethod = genericDeserializeMethod.MakeGenericMethod(ty);
closedDeserializeMethod.Invoke(serializer, new object[] { inputContext });

10-08 12:40