2013-04-09 4 views
3

Как сериализовать свойства в пользовательском контроле?Сериализация XML - сериализация свойств в пользовательском управлении

Я попытался следующий код, но я получил InvalidOperationExceptio, при создании объекта XmlSerializer

MyUserControl userControl = new MyUserControl(); 
XmlSerializer serializer = new XmlSerializer(typeof(MyUserControl)); 
Stream stream = new MemoryStream(); 
TextWriter writer = new StreamWriter(stream); 
serializer.Serialize(writer, userControl); 

Исключение:

System.InvalidOperationException был необработанное

HResult = -2146233079

Сообщение = Было изображение с ошибкой 'Demo.M yUserControl.

+0

Для аналогичной проблемы данные I привязали мой контроль к классу, а затем сериализованы, что вы говорите об атрибутах привязки данных, таких как имя пользователя или имя или пользовательские свойства/значения? – Sayse

+0

Вы пробовали это? http://www.codeproject.com/Articles/27158/XamlWriter-and-Bindings-Serialization –

ответ

1

Вы не должны делать это так ИМХО.

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

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

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

Если вы действительно должны сериализовать пользовательский элемент управления (и я настоятельно рекомендую вам сделать не) вы можете попробовать использовать DataContract serialization, который имеет механизм «отказ в», для которого свойство получить сериализации, а не «отказ» для более старой сериализации.

+0

Сериализация DataContract не решает проблему, поскольку UserControl не отмечен как Serializable или DataContract, поэтому любой производный тип не может быть сериализован с помощью DataContractSerializer. –

Смежные вопросы