2009-09-24 3 views
0

Я ищу способ перенести объекты Silverlight на компьютер пользователя, а затем повторно увлажнить их, чтобы пользователь мог закончить их редактирование.Проблема сериализации/десериализации Silverlight

Последовательный с DataContractSerializer и сохраняющийся до IsolatedStorageFile работает отлично. Однако десериализация вызывает проблему. Вот код, который вызывает сбой:

private string _FirstNames = string.Empty; 
public string FirstNames 
{ 
    get { return _FirstNames; } 
    set 
    { 
     new PersonNameValidator().Validate(value); //<-- BOOM 8(
     Set(ref _FirstNames, value,() => this.FirstNames); 
    } 
} 

deserialiser называет свойство сеттера, который, в свою очередь, вызывает исключение и ликвидирует десериализацию.

Я попытался явно применение DataContract/DataMember/IgnoreDataMember атрибутов, но тогда это не дружит с частными полями:

System.Security.SecurityException произошло Message = "Тип контракта данных «Trident.Model.Journey.JourneyApplication» не может быть сериализовать, потому что член «_TravellerSavingsAmount» является не публичный. Заставить член общественного будет исправить эту ошибку. С другой стороны, вы можете сделать его внутренним и использовать атрибут InternalsVisibleToAttribute на вашей сборке, чтобы включить сериализацию внутренних элементов . см. документацию для более подробной информации. Будьте знают, что делать это имеет определенные последствия безопасности.»

Как я могу обойти сеттеры недвижимость во десериализация?

Я хотел бы, чтобы мои занятия, ориентированные на домен, и не слишком загрязнены с проблемами инфраструктуры

ответ

0

Паром идей:.

  • сериализация свойство, которое используется только для сериализации, таким образом, минуя любую в lidation
  • сериализации родительский класс и использовать производный класс для проверки
+0

Благодаря Joel. Я рассмотрел первый момент, но не люблю идею добавления дополнительных общедоступных свойств/полей только для поддержки сериализации. Что касается использования производных классов: это может стать громоздким, поскольку мои объектные графы увеличиваются по сложности. Я не хочу писать пользовательскую подпрограмму для обработки каждого графа объектов, который я создаю. –