2011-07-12 9 views
2

1.0 WP7アプリケーションをCM 1.1にアップグレードします。他のものの中で、私は古い属性ベースの廃棄墓石を削除し、ストレージクラスを実装しています。Caliburn.Microのカスタムシリアル化1.1

これは典型的には、(Tは、VMのタイプである)StorageHandler<T>から導出、記憶のために、各VMのクラスを作成し、例えばようにそのConfigureメソッドをオーバーライドすることを含む。この文脈において

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

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

誰かが偽のCM WP7サンプルを表示して、シリアル化/デシリアライズするための独自のコードを配置できるように、いくつかのプロパティのシリアル化をカスタマイズする方法を説明できますか? ありがとう!

答えて

3

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

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

と逆::のような彼らの実装と

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

ストロークについては

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)はリストアに問題があるようです(あいまいなマッチリフレクション例外がスローされます)。

関連する問題