传递运行时类型时无法解决符号exception

我有一个JSON反序列化器(如下所示),当我用一种已知的类型调用它时它工作得非常好。

public static T Deserialize(this object obj) { var javaScriptSerializer = new JavaScriptSerializer(); return (obj != null) ? javaScriptSerializer.Deserialize(obj.ToString()) : default(T); } 

所以这个电话会起作用:

 var newExampleTypeX = exampleJsonString.Deserialize(); 

但是,我要做的是传入一个在运行时设置的类型,并使用它代替“ExampleTypeX”。 当我这样做时,我得到以下编译错误:

 Cannot resolve symbol 'someType' 

所以someType的声明看起来像这样(这是一个简化版本):

 var someType = typeof(ExampleTypeX); var newExampleTypeX = message.Deserialize(); 

我应该以某种方式改变我的Deserialize扩展方法,还是改变我传递运行时类型的方式? 如果是,那我该如何实现呢?

与generics一起使用的类型必须知道编译时。 这就是你不能这样做的原因:

 var someType = typeof(ExampleTypeX); var newExampleTypeX = message.Deserialize(); 

它与JavaScriptSerializer无关 – 这就是generics的工作原理。

如果你真的需要,你可以使用reflection来绕过它,但我认为你不应该这样做。

您可以在这两个问题中阅读有关使用generics类型和扩展方法的reflection的更多信息:

C#中的generics,使用变量的类型作为参数

识别扩展方法的思考