使用在运行时生成的类型

时间:2017-06-24 06:50:57

标签: c# json.net

我想在运行时选择并实例化几个类。例如:

public class MyClassA{ 
  public int property1 {get; set;}
  public string property2 {get; set;}
}

public class MyClassB{ 
  public int property1 {get; set;}
  public string property3 {get; set;}
}

让我们说,MyClassB是在运行时选择的:

Type t = Type.GetType("MyNamespace.MyClassB");
Object myType = Activator.CreateInstance(t);

现在,我想将myType作为一种类型传递给其他类/方法。

myType myDeserializedObject = JsonConvert.DeserializeObject<myType>(MyJsonString);

代码永远不会编译投掷&#34; myType是一个变量但是像类型一样使用&#34;错误。

是否有任何方法或解决方法将激活的实例转换为类型?如果还有其他方法我应该留意,请告诉我。 谢谢!

2 个答案:

答案 0 :(得分:2)

您无法将变量Type作为通用传递。而是使用

var myDeserializedObject = JsonConvert.DeserializeObject(MyJsonString, t);

答案 1 :(得分:1)

当您将变量声明为类型或使用类型调用泛型方法时,类型检查在编译时完成。如果直到运行时才知道类型,则不起作用。这就是为什么这两个原因:

manage.py migrate bookingservice

......没有编译。编译器不知道要生成myDeserializedObject的类型,并且它不能编译适用于myType的myType myDeserializedObject = JsonConvert.DeserializeObject<myType>(MyJsonString); 版本,除非它知道myType是什么。

有很多方法可以使这项工作,但在某些时候你可能需要做一些类型检查逻辑。也许是这样的:

DeserializeObject<T>