Serialize使用Reflection to XML获得的Class

时间:2014-10-31 21:04:29

标签: c# reflection xml-serialization inner-classes

我有一个如下所示的文件:

public abstract class TestStep
{
   public abstract bool DoWork();
   public abstract List<TestStep> PrerequisiteSteps { get; set; }
   public abstract string DisplayForm { get; }
}

class TestFunctions
{
   public class A : TestStep
   {
      public override string DisplayForm { get { return "MainForm; } }
      // remaining implementation goes here...
   }
   public class B : TestStep { // some implementation }
   public class C : TestStep { // some implementation }
   public static void NextStep() { }
}

我想将类ABC序列化为XML文件。我可以手动将这些类的实例添加到List<TestStep>对象并将其传递给XML序列化程序,但我想以编程方式完成此操作,因为我可能在TestFunctions中添加或删除类未来。结果,我发现我可以使用反射来获得一系列函数:

Type type = (typeof(TestEngineFunctions));
Type[] testEngineFunctions = type.GetNestedTypes(BindingFlags.Public);

但是我不确定如何从这里开始。我可以访问函数的名称,我也可以获取它们的属性,但最终我没有实际的对象序列化。
我是在正确的轨道还是有另一种方法更适合这个?

1 个答案:

答案 0 :(得分:1)

您可以像这样获取对象的新实例:

ObjectType instance = (ObjectType)Activator.CreateInstance(objectType);

由于您可能在运行时之前不知道ObjectType,因此您可以使用dynamic类型并且不会投射:

dynamic instance = Activator.CreateInstance(objectType);

但是,如果在实例化后立即尝试序列化,则只需获取XML中对象的默认值。