2014-04-09 22 views
0

我想从数据库中反序列化一个对象,该对象作为json存储在列中,然后反序列化,事情是我正在尝试一个通用的方法并实现这一点,所以我还在一列中存储了反序列化类型。使用Type对象反序列化对象会引发编译错误

所以我想要做的是通过Type.GetType("mytype")获得类型,并将该类型传递给必须通过该类型的方法。

的问题是,由于某种原因,视觉工作室不明白这个systax,并强调它是错的,也许我用的是不好的方法,我做的是:

string toDeserialize = "jsonObject"; 
JsonConvert.DeserializeObject<Type.GetType("customType")>(toDeserialize); 

而且错误视觉工作室抛出是:

运算符“<”不能被应用于类型“方法组”和 “的System.Type”

的操作数

我能做些什么来解决这个问题?

回答

2

以这种方式提供的泛型类型参数必须在编译时已知。如果要使用在运行时指定的类型调用此泛型方法,则可以使用反射通过MakeGenericMethod生成方法。

但幸运的是,JsonConvert提供this non-generic overload作为替代:

Type resultType = Type.GetType("customType"); 
object result = JsonConvert.DeserializeObject(toDeserialize, resultType); 
+0

不正确的,通用型的参数可以在运行时也使用经由'MakeGenericMethod'反射分配。 – Haney

+1

@DavidHaney正确。更新澄清。 –

+0

很高兴认识你们俩,它的错误信息是如此不清楚:s。 –