0

在我的WP8应用程序中,我有一个特殊类型的存储在IsolatedStorageSettings.ApplicationSettings中的'settings'对象。这些对象在其构造函数中设置了一些初始状态,并且该状态稍后可能会更改。从IsolatedStorage反序列化时不要调用对象构造函数

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

基本上是这样的:

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 

我能以某种方式改变的过程中,使对象的构造将不会在反序列化被称为?

回答

2

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

因此,一个快速的解决方法是将默认无参数构造函数留空,并在构造函数中使用参数或专门调用初始化对象的方法来执行特定的init。或者,使用专用类型来序列化/反序列化DTO(数据传输对象),然后从该对象使用所需的任何信息。


但无论如何,事情是腥,你的代码示例中,像您期望的,因为第一解串器将调用构造函数后,才设置的属性,你可以通过设置断点测试这个它应该工作类构造函数以及单个属性的setter中,以查看流程工作流。

相关问题