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

もちろん、デシリアライザーは型のコンストラクターを呼び出す必要があります。これは、最初に型 (オブジェクト) のインスタンスを作成し、次にシリアル化された入力で見つかったデータをオブジェクトのプロパティに入力する必要があるためです。

したがって、簡単な回避策は、デフォルトのパラメーターなしのコンストラクターを空白のままにして、コンストラクターでパラメーターを使用するか、オブジェクトを初期化するメソッドへの専用呼び出しを使用して特別な init を実行することです。

または、シリアライズ/デシリアライズ専用の型である DTO (データ転送オブジェクト) を使用し、そのオブジェクトから必要な情報を使用します。


しかし、とにかく、何かが怪しいです。あなたのコードサンプルでは、​​最初にデシリアライザーがコンストラクターを呼び出し、その後プロパティを設定した後にのみ、クラスコンストラクターとセッターにブレークポイントを設定することでこれをテストできるため、期待どおりに動作するはずですプロセス ワークフローを表示する個々のプロパティ。

于 2013-01-03T17:59:05.553 に答える