繁体   English   中英

何时使用XmlSerializer.Deserialize进行反序列化时调用类构造函数?

[英]When is the class constructor called while deserialising using XmlSerializer.Deserialize?

我的应用程序使用XmlSerializer保存一个类,然后在需要时通过再次反序列化来创建一个实例。 我想在我的构造函数逻辑中使用我的类的一些属性成员(在反序列化期间分配)。 可以假设首先分配属性,并且一旦分配了所有属性,就会调用构造函数吗?

继续讨论这个主题,是否有关于反序列化过程中发生的事件序列的文档?

不,假设在构造函数运行时将设置属性是不行的。 反之亦然。 构造函数是在创建对象实例时运行的第一段代码。 在构造函数开始执行之前,不可能设置属性。

XML反序列化过程大致如下所示

  • 调用无参数构造函数
  • 将属性设置为其反序列化的值

解决此问题的方法是使用工厂方法执行反序列化,然后运行取决于所设置属性的逻辑。 例如

class MyClass {
  ...
  public static MyClass Deserialize(string xmlContents) {
    var local = ... // Do the XML deserialization
    local.PostCreateLogic();
    return local;
  }
}

构造函数是对象的创建。 在分配属性值之前,需要创建对象。 然后,将首先调用构造函数。

我不知道序列的任何文档。 但如果你的课程不是那么大,可以添加一些断点,你会看到哪些事件是第一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM