Как я могу сериализовать объекты, которые наследуют встроенные классы c #? - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь создать функцию, которая будет сохранять текущее состояние моего приложения в файл, и другую функцию для загрузки сохраненного файла. В настоящее время вся информация содержится в одном объекте, который, в свою очередь, относится к другим объектам. Недавно я слышал, что в C # есть некоторые встроенные классы, которые помогают вам сериализовать и десериализовывать ваши объекты, поэтому я провел небольшое исследование и узнал о DataContracts, в основном на этой странице:

Большинство из них работает, за исключением классов, которые реализуют встроенные классы. Например, у меня есть объект, который наследует System.Windows.DependencyObject, и когда я пытаюсь его сериализовать, он жалуется, что мой класс наследует класс, который не имеет атрибута DataContract.

Для меня имеет смысл, почему это будет проблемой. Когда объект десериализуется, его конструктор не вызывается. Если он наследует что-то, что не сериализуемо, это может оставить его в недопустимом состоянии.

Мне было интересно, возможно ли это: могу ли я как-то сказать десериализатору вызвать конструктор по умолчанию базового класса перед десериализацией моего объекта? И тогда я должен был бы сказать сериализатору, чтобы он не волновался.

Ответы [ 2 ]

1 голос
/ 15 марта 2012

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

0 голосов
/ 15 марта 2012

Возможно, вы захотите использовать двоичный сериализатор или сериализатор xml вместо сериализатора контракта данных для этого. Если вы сохраняете его в файл и не нуждаетесь в файле, читаемая человеком двоичная сериализация почти всегда работает.

См. Двоичная сериализация и, в частности, тема Basic Serialization . Также обратите внимание на класс XmlSerializer , который иногда будет работать там, где DataContractSerializer не работает.

...