windows-phone-7 - Caliburn.Micro 1.1 中的自定义序列化

标签 windows-phone-7 caliburn.micro tombstoning

我正在将 1.0 WP7 应用程序升级到 CM 1.1。除其他事项外,我正在删除旧的基于属性的逻辑删除并实现存储类。

这通常涉及为每个虚拟机创建一个用于存储目的的类,该类派生自 StorageHandler<T> (其中 T 是虚拟机的类型)并覆盖其 Configure方法例如:

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

在这种情况下,如何使用自己的序列化/反序列化代码为无法自动序列化的对象实现自定义序列化机制?例如,我的一个虚拟机有 StrokeCollection属性,我想序列化其中的笔画,但为此我需要替换默认机制,这会引发安全异常。

有人可以展示一个假的 CM WP7 示例来说明如何自定义某些属性的序列化,以便我可以放置自己的代码进行序列化/反序列化吗? 谢谢!

最佳答案

我不知道这是否是正确的道路,但它有效;这是一个代码示例:

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)似乎在恢复方面存在问题(它引发了不明确的匹配反射异常)。

关于windows-phone-7 - Caliburn.Micro 1.1 中的自定义序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6666455/

相关文章:

c# - 墓碑工作正常,但我的应用程序需要它吗?

wpf - 表达混合初学者

c# - 我的图片没有出现在 listcontrol

javascript - 选择文本输入时强制显示键盘

windows-phone-7 - 如何: Data Persistence in Windows Phone

windows-phone-7 - 在墓碑后恢复 LongListSelector 中的滚动位置

windows-phone-7 - 导航到详细信息页面 - 共享 View 模型或导航查询字符串?

windows-phone-7 - 如何在 Windows Phone 中打开 .pdf、.doc 文件 (C#)

wpf - Caliburn.Micro 中单选按钮的约定

c# - Caliburn.Micro 屏幕通过导体过渡