Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
nicolas2008
245 / 229 / 85
Регистрация: 30.04.2009
Сообщений: 689
Завершенные тесты: 1
#1

Сериализация...

15.04.2011, 19:40. Просмотров 1350. Ответов 5
Метки нет (Все метки)

Пишу прогу на wpf c использованием паттерна MVVM и библиотеки упрощающей это дело
C#
1
GalaSoft.MvvmLight
Во ViewModel находится вложенная модель, свойства которой используются в биндинге.
Бывает необходимо вызывать метод
C#
1
RaisePropertyChanged("InnerModel")
.
После некоторых манипуляцый в интерфейсе мне нужно эту вложеную модель сериализовать.

Проблема заключается в том, что после вызова метода RaisePropertyChanged("InnerModel") к обьекту каким то образом прикручивается
C#
1
PropertyChangedEventHandler
, и бинарный сериализатор ругается что этот тип несериализуемый.

Если не вызывать
C#
1
RaisePropertyChanged("InnerModel")
то все ОК.
Помогите решить проблему, плиз.

Может как то можно пометить только те свойтсва, которые нужно сериализовать + все свойства сериализуемых свойств.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2011, 19:40
Ответы с готовыми решениями:

Сериализация и поток
Пишу курсач на WPF. Приложение с прыгающим текстом. При нажатии на форму текст...

Сериализация класса
Есть клас которий нада сериализовать, пишу такой код на кнопке и не...

Сериализация в Silverlight
Здравствуйте, столкнулся с необходимостью сериализации объектов (классы...

Сериализация BitmapImage в XML
class X { .... public BitmapImage Picture{set;get;} .... } как...

XAML сериализация и наследование
Всем респект. Есть такая небольшая проблема с наследованием объектов и...

5
kenny69
burning1ife
1377 / 1203 / 283
Регистрация: 21.09.2008
Сообщений: 3,364
Записей в блоге: 9
16.04.2011, 12:53 #2
ты просто пометь PropertyChangedEventHandler аттрибутом [NonSerializable]
0
nicolas2008
245 / 229 / 85
Регистрация: 30.04.2009
Сообщений: 689
Завершенные тесты: 1
17.04.2011, 12:21  [ТС] #3
Цитата Сообщение от kenny69 Посмотреть сообщение
ты просто пометь PropertyChangedEventHandler аттрибутом [NonSerializable]
Нету в модели такого свойства, его каким то образом докручивает метод RaisePropertyChanged.
Перед вызовом этого метода все норм сериализуется.
0
Sayrus89
31 / 31 / 7
Регистрация: 26.10.2009
Сообщений: 98
19.04.2011, 22:13 #4
В модели есть такое свойство, так как базовый класс реализует интерфейс INotofyPropertyChanged. Как вариант, Вы можете заново пронаследовать этот интерфейс, перекрыть это свойство и использовать Xml сериализацию, пометив это свойство атрибутом - XmlIngnore - http://msdn.microsoft.com/ru-ru/libr...attribute.aspx .
Либо же можно пронаследовать IXmlSerializable или ISerializable и имплементировать методы сериализации и десириализации с своей логикой.
Об этом и о многом другом на msdn - http://msdn.microsoft.com/ru-ru/library/7ay27kt9.aspx
0
kenny69
burning1ife
1377 / 1203 / 283
Регистрация: 21.09.2008
Сообщений: 3,364
Записей в блоге: 9
19.04.2011, 23:26 #5
т.к. ты реализуешь интерфейс INotofyPropertyChanged, то PropertyChangedEventHandler должен быть в твоем классе.
0
nicolas2008
245 / 229 / 85
Регистрация: 30.04.2009
Сообщений: 689
Завершенные тесты: 1
20.04.2011, 20:53  [ТС] #6
обьясню подробнее...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class MyViewModel: ViewModelBase //ViewModelBase описан где то в Galasoft.MvvmLight
{
      public DataModel Data {get;set;} //это свойство мне нужно сериализовать
      
      public void SerializeBeforeRaisePropertyChanged()
      {
          var ms = new MemoryStream();
          var bf = new BinaryFormatter();
          bf.Serialize(ms,Data);
        //success
      }
      
 
      public void SerializeAfterRaisePropertyChanged()
      {
          RaisePropertyChanged("Data");
          var ms = new MemoryStream();
          var bf = new BinaryFormatter();
          bf.Serialize(ms,Data);
          //fail
          //тип PropertyChangedEventManager из сборки WindowsBase не помечен как сериализуемый
      }
 
}
 
[Serializable]
public class DataModel
{
      public string Property1 {get;set;}
      public int Property2 {get;set;}
      // и т.д.
}
То есть я нигде не обьявляю свойство типа PropertyChangedEventManager.
Оно странным образом добавляется в функции RaisePropertyChanged.
0
20.04.2011, 20:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2011, 20:53

Сериализация данных календаря
Добрый день! Пишу элементарный органайзер на WPF .Хочу сделать так, чтобы при...

Сериализация и десериализация списка студентов
Помогите пожалуйста, не могу добиться правильной сериализации данных. ...

Сериализация xaml wpf пример
Подскажите пожалуйста как сохранить ListBox который создан в XAML а потом из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru