Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
1

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

15.04.2011, 19:40. Показов 2348. Ответов 6
Метки нет (Все метки)

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

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

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

Может как то можно пометить только те свойтсва, которые нужно сериализовать + все свойства сериализуемых свойств.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2011, 19:40
Ответы с готовыми решениями:

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

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

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

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

6
burning1ife
1462 / 1284 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
16.04.2011, 12:53 2
ты просто пометь PropertyChangedEventHandler аттрибутом [NonSerializable]
0
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
17.04.2011, 12:21  [ТС] 3
Цитата Сообщение от kenny69 Посмотреть сообщение
ты просто пометь PropertyChangedEventHandler аттрибутом [NonSerializable]
Нету в модели такого свойства, его каким то образом докручивает метод RaisePropertyChanged.
Перед вызовом этого метода все норм сериализуется.
0
32 / 32 / 7
Регистрация: 26.10.2009
Сообщений: 98
19.04.2011, 22:13 4
В модели есть такое свойство, так как базовый класс реализует интерфейс INotofyPropertyChanged. Как вариант, Вы можете заново пронаследовать этот интерфейс, перекрыть это свойство и использовать Xml сериализацию, пометив это свойство атрибутом - XmlIngnore - http://msdn.microsoft.com/ru-r... ibute.aspx .
Либо же можно пронаследовать IXmlSerializable или ISerializable и имплементировать методы сериализации и десириализации с своей логикой.
Об этом и о многом другом на msdn - http://msdn.microsoft.com/ru-r... 27kt9.aspx
0
burning1ife
1462 / 1284 / 293
Регистрация: 21.09.2008
Сообщений: 3,438
Записей в блоге: 9
19.04.2011, 23:26 5
т.к. ты реализуешь интерфейс INotofyPropertyChanged, то PropertyChangedEventHandler должен быть в твоем классе.
0
1144 / 853 / 262
Регистрация: 30.04.2009
Сообщений: 3,581
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
0 / 0 / 0
Регистрация: 11.05.2020
Сообщений: 1
18.08.2020, 16:50 7
Для меня оказалось достаточным унаследовать ISerializable с пустым методом GetObjectData, после этого сериализуется без проблем.
0
18.08.2020, 16:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2020, 16:50
Помогаю со студенческими работами здесь

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

Сериализация BitmapImage в XML
class X { .... public BitmapImage Picture{set;get;} .... } как сериализовать это свойство...

Сериализация
Вообщем проблема достаточно простая,есть класс сериализую его как по учебнику,все проходит...

Сериализация
Есть приложение, структура которого состоит из большого числа мелких классов(~160 шт), которые...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru