0

在我的 WP8 应用程序中,我有一种特殊类型的“设置”对象,它们存储在IsolatedStorageSettings.ApplicationSettings. 这些对象在其构造函数中设置了一些初始状态,并且该状态可能会在以后更改。

现在的问题是,显然当对象被反序列化时,它的构造函数被再次调用,从而重置状态的变化,这不是我想要的。

基本上是这样的:

class Test
{
    public int a { get; set; }
    public Test() { a = 1; }
}

Test x = new Test();
x.a = 2;

IsolatedStorageSettings.ApplicationSettings["test"] = x;
IsolatedStorageSettings.ApplicationSettings.Save();

// on next app launch
Test x = IsolatedStorageSettings.ApplicationSettings["test"] as Test;
Debug.writeLine(x.a) // 1, I want 2

我可以以某种方式更改过程,以便在反序列化时不会调用对象的构造函数吗?

4

1 回答 1

2

当然,反序列化器必须调用类型的构造函数,因为它需要首先创建一个类型(对象)的实例,然后用序列化输入中的数据填充对象的属性。

因此,一个快速的解决方法是将默认的无参数构造函数留空,并在带有参数的构造函数中执行特殊的初始化操作,或者使用对方法的专用调用来初始化对象。

或者,使用专用类型进行序列化/反序列化,即 DTO(数据传输对象),然后从该对象中使用您需要的任何信息。


但无论如何,有些东西是可疑的,在您的代码示例中,它应该按您的预期工作,因为首先反序列化程序会调用构造函数,并且只有在设置属性之后,您才能通过在类构造函数和设置器中设置断点来测试它各个属性以查看流程工作流。

于 2013-01-03T17:59:05.553 回答