我尝试通过数据合同序列化来序列化和反序列化自定义类。 序列化效果很好。但是,当反序列化时,我遇到了一个问题,因此(source):如何在反序列化之前调用构造函数?
对象反序列化时不调用构造函数。
事情是,我在构造函数中做了一些初始化。 这包括一些数据结构。
没有对构造函数的调用,数据结构为null
,并且在反序列化过程中调用setter函数失败。
如何在使用任何访问器之前在反序列化过程之前或过程中调用构造函数或初始化对象?
有几个方法,我可以通过属性为回调声明,像这样(同一消息来源):
// This method is called after the object
// is completely deserialized. Use it instead of the
// constructror.
[OnDeserialized]
void OnDeserialized(StreamingContext context)
{
fullName = firstName + " " + lastName;
}
但是看起来他们都是的deserialisation后触发。
是否必须切换到XML序列化?
在应用程序序列化之前,这应该已经发生了。所以再这样做会是错误的。 –
是的,使用'OnDeserialized'方法可以初始化字段。在此之前,没有人可以访问字段/属性。 –
@HansPassant反序列化独立发生。在程序的执行过程中,我只加载序列化数据并想将其反序列化为一个对象。在反序列化之前甚至没有发生序列化(在这个程序的例子中)。我不太确定在此之前我将如何调用构造函数。 – null