序列化使用反射到XML获得的类

本文关键字:XML 反射 序列化 | 更新日期: 2023-09-27 18:28:35

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

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);

然而,我不确定从这里开始如何进行。我可以访问函数的名称,也可以获取它们的属性,但最终我没有实际的对象来序列化
我走在正确的轨道上了吗?或者有其他更适合的方法吗?

序列化使用反射到XML获得的类

您可以获得如下对象的新实例:

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

由于您可能在运行时之前不知道ObjectType,因此可以使用dynamic类型,而不强制转换:

dynamic instance = Activator.CreateInstance(objectType);

但是,如果您试图在实例化之后立即进行序列化,那么您只会在XML中获得对象的默认值。