【问题标题】:Serialize Class obtained using Reflection to XML使用反射到 XML 获得的序列化类
【发布时间】:2014-10-31 21:04:29
【问题描述】:

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

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&lt;TestStep&gt; 对象并将其传递给 XML 序列化程序,但我想以编程方式完成此操作,因为将来我可能会在 TestFunctions 中添加或删除类。结果,我发现我可以使用反射来获取函数数组:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    dynamic instance = Activator.CreateInstance(objectType);
    

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

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-03
      • 2023-04-07
      • 2019-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多