我的应用程序使用 XmlSerializer 保存了一个类,然后在需要时通过再次反序列化它来创建一个实例。我想在我的构造函数逻辑中使用我的类的一些属性成员(在反序列化期间分配)。可以假设先分配属性,一旦分配了所有属性,构造函数会被调用吗?
继续讨论这个话题,是否有任何关于反序列化期间发生的事件顺序的文档?
我的应用程序使用 XmlSerializer 保存了一个类,然后在需要时通过再次反序列化它来创建一个实例。我想在我的构造函数逻辑中使用我的类的一些属性成员(在反序列化期间分配)。可以假设先分配属性,一旦分配了所有属性,构造函数会被调用吗?
继续讨论这个话题,是否有任何关于反序列化期间发生的事件顺序的文档?
不,假设在构造函数运行时将设置属性是不正确的。反之亦然。构造函数是创建对象实例时运行的第一段代码。在构造函数开始执行之前,无法设置属性。
XML反序列化过程大致如下
解决此问题的一种方法是使用工厂方法进行反序列化,然后运行取决于正在设置的属性的逻辑。例如
class MyClass {
...
public static MyClass Deserialize(string xmlContents) {
var local = ... // Do the XML deserialization
local.PostCreateLogic();
return local;
}
}
构造函数是您的对象的创建。您的对象需要在分配属性值之前创建。然后,将首先调用构造函数。
我不知道该序列的任何文档。但是如果你的类不是那么大,可以添加一些断点,你会看到哪个事件是第一个。