Пользовательская сериализация в Caliburn.Micro 1.1 - PullRequest
2 голосов
/ 12 июля 2011

Я обновляю приложение 1.0 WP7 до CM 1.1. Среди прочего я убираю старые атрибуты захоронения и реализую классы хранения.

Обычно это включает в себя создание класса для каждой виртуальной машины для целей хранения, извлечение его из StorageHandler<T> (где T - тип виртуальной машины) и переопределение ее Configure метода, например, например ::1005*

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

В этом контексте, как я могу реализовать собственный механизм сериализации, используя мой собственный код сериализации / десериализации для объектов, которые не могут быть автоматически сериализованы? Например, одна из моих виртуальных машин имеет свойство StrokeCollection, и я хотел бы сериализовать штрихи в ней, но для этого мне нужно заменить механизм по умолчанию, который вызовет исключения безопасности.

Может ли кто-нибудь показать поддельный образец CM WP7, чтобы проиллюстрировать, как настроить сериализацию некоторого свойства, чтобы я мог разместить свой собственный код для сериализации / десериализации его? Спасибо!

1 Ответ

3 голосов
/ 23 июля 2011

Я не знаю, правильный ли это путь, но он работает; Вот пример кода:

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), похоже, испытывает проблемы при восстановлении (он выдает неоднозначное исключение отражения соответствия).

...