C#反映未知的子类型

C#反映未知的子类型,c#,generics,C#,Generics,我有一门课: 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 ch

我有一门课:

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";
这里有没有通过以下字符串设置child的解决方案:

Activator.SetParan(instance,"var1" , "Some text from the XML");

还是别的什么?

您是否考虑过在这里使用
动态
。这将使代码更加简单

dynamic instance = Activator.CreateInstance(Type.GetType(child ) , ...);
instance.var1 = "some text from the XML";
此外,您不使用已知序列化引擎还有其他原因。如果您只是将对象从XML流序列化为XML流,那么有许多现有的解决方案可以让您的生活更轻松


您是否考虑过在此处使用
动态
。这将使代码更加简单

dynamic instance = Activator.CreateInstance(Type.GetType(child ) , ...);
instance.var1 = "some text from the XML";
此外,您不使用已知序列化引擎还有其他原因。如果您只是将对象从XML流序列化为XML流,那么有许多现有的解决方案可以让您的生活更轻松


给子类一个构造函数,然后通过第二个参数向Activator.CreateInstance提供参数,Activator.CreateInstance将构造函数参数作为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" }); 

为子类提供一个构造函数,然后通过第二个参数向Activator.CreateInstance提供参数,Activator.CreateInstance将构造函数参数作为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" }); 

这听起来是一个很好的解决方案,但我仍然有一个问题
var1
也是从xml输入的dinamic文本,所以我在编码时没有它,只有当我使用,thanks@yosmishan如果名称本身是通用的,那么很可能你需要下拉到反射,然后再使用现有的序列化框架。我不明白,你能给我一个教程链接吗?谢谢你的帮助help@yosmishan尝试以下方法听起来是一个很好的解决方案,但我仍然有一个问题
var1
也是从xml输入的dinamic文本,所以我在编码时没有它,只有当我使用,thanks@yosmishan如果名称本身是通用的,那么很可能你需要下拉到反射,然后再使用现有的序列化框架。我不明白,你能给我一个教程链接吗?谢谢你的帮助help@yosmishan试试下面的方法