反映未知的子类型
本文关键字:类型 未知 | 更新日期: 2023-09-27 18:13:30
我有一个类:
public class Chid1 : Parent{
public string var1{get;set;}
public string var2{get;set;}
}
public class Chid2 : Parent{
public string var3{get;set;}
public string var4{get;set;}
}
我正在从xml文件中收集一些数据,我需要设置这些类。
这就是我现在能做的:
string child = "Chid1";//from the xml
Parent instance = (Parent)Activator.CreateInstance(Type.GetType(child ) , ...);
由于Parent不包含孩子的详细信息,所以我不能:
instance.var1 = "Some text from the XML";
是否有任何解决方案,设置孩子通过字符串,如:
Activator.SetParan(instance,"var1" , "Some text from the XML");
还是别的什么?
您考虑过在这里使用dynamic
吗?这将使代码简单得多。
dynamic instance = Activator.CreateInstance(Type.GetType(child ) , ...);
instance.var1 = "some text from the XML";
另外,是否存在不使用已知序列化引擎的原因?如果您只是简单地将对象与XML流序列化,那么有许多现有的解决方案可以使您的工作更轻松
- 。Net XML序列化
- .Net协议
为子类提供构造函数,然后通过第二个参数向Activator提供参数。CreateInstance,它接受构造函数参数作为参数对象[]:
public class Child1 : Parent
{
public Child1(string _var1, string _var2)
{
this.var1 = _var1;
this.var2 = _var2
}
public string var1 { get; set;}
public string var2 { get; set;}
}
Activator.CreateInstance(typeof(Child1), new object[] { "var1", "var2" });