我有一个班级:
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 ) , ...);
由于家长没有关于孩子的详细信息,我不能这样做:
instance.var1 = "Some text from the XML";
这里是否有通过以下字符串设置子节点的解决方案:
Activator.SetParan(instance,"var1" , "Some text from the XML");
还是其他什么?
答案 0 :(得分:4)
您是否考虑过在此使用dynamic
?它会使代码更简单。
dynamic instance = Activator.CreateInstance(Type.GetType(child ) , ...);
instance.var1 = "some text from the XML";
此外,您还没有使用已知序列化引擎的原因。如果您只是将对象序列化为XML流,那么有许多现有的解决方案可以让您的生活更轻松
答案 1 :(得分:0)
为子类提供一个构造函数,然后通过第二个参数将参数提供给Activator.CreateInstance,它将构造函数args作为params对象[]:
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" });