2

1.0WP7アプリケーションをCM1.1にアップグレードしています。とりわけ、古い属性ベースのトゥームストーニングを削除し、ストレージクラスを実装しています。

これには通常、ストレージの目的でVMごとにクラスを作成し、そこから派生させStorageHandler<T>(TはVMのタイプ)、次のConfigureようにそのメソッドをオーバーライドすることが含まれます。

public override void Configure()
{
  Property(x => x.SomeSerializableProperty).InPhoneState().RestoreAfterViewLoad();
  // ...
}

このコンテキストでは、自動的にシリアル化できなかったオブジェクトに対して独自のシリアル化/逆シリアル化コードを使用して、カスタムシリアル化メカニズムを実装するにはどうすればよいですか?たとえば、VMの1つにStrokeCollectionプロパティがあり、その中のストロークをシリアル化したいのですが、この目的のために、セキュリティ例外を発生させるデフォルトのメカニズムを置き換える必要があります。

誰かが偽のCMWP7サンプルを見せて、プロパティのシリアル化をカスタマイズする方法を説明して、シリアル化/逆シリアル化するための独自のコードを配置できるようにすることはできますか?ありがとう!

4

1 に答える 1

3

これが正しい道かどうかはわかりませんが、うまくいきます。コードサンプルは次のとおりです。

Property(x => x.Strokes).InPhoneState().RestoreAfterViewReady().Configure(x =>
{
    x.Save = SaveStrokes;
    x.Restore = RestoreStrokes;
});

次のような実装で:

void SaveStrokes(BoardViewModel vm, Func<string> serialize, StorageMode nMode)
{
  IsolatedStorageSettings.ApplicationSettings[vm.DisplayName + "ThePropertyKey"] = 
  // ...get data from vm and serialize
}

逆に:

void RestoreStrokes(BoardViewModel vm, Func<string> serialize, StorageMode nMode)
{
  // use IsolatedStorageSettings.ApplicationSettings[vm.DisplayName + "ThePropertyKey"] 
  // to check if the key exists, and if it is there get the serialized data and deserialize
}

ストロークに関しては、この目的のための通常のツール(SharpSerializer)として独自のシリアル化クラスを使用していますが、復元に問題があるようです(あいまいな一致反射例外がスローされます)。

于 2011-07-23T16:17:33.507 に答える