Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > сериализовать UserControl.


Автор: Kakadu 19.4.2009, 11:03
user posted image
Код

public class Graph : UserControl {
        ...
        public void Serialize(string FileName) {
            XmlSerializer xmls = new XmlSerializer(typeof(UserControl));
            TextWriter writer = new StreamWriter(FileName);
            xmls.Serialize(writer, this);
            writer.Close();
        }
}

Код

System.InvalidOperationException: Возникла ошибка при отражении типа "System.Windows.Forms.UserControl". ---> 
System.InvalidOperationException: Не удается сериализовать член "System.ComponentModel.Component.Site" типа "System.ComponentModel.ISite". Дополнительные сведения см. во внутреннем исключении. ---> 
System.NotSupportedException: Невозможно сериализовать член System.ComponentModel.Component.Site типа System.ComponentModel.ISite, т.к. он является интерфейсом.

Как правильно сериализовать? Или надо использовать DesignerSerializer?
Код

    [DesignerSerializer("System.Windows.Forms.Design.ControlCodeDomSerializer, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.ComponentModel.Design.Serialization.CodeDomSerializer, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
    public class Control : Component, IDropTarget, ISynchronizeInvoke, IWin32Window, IBindableComponent, IComponent, IDisposable {
...
}

http://msdn.microsoft.com/en-us/library/system.componentmodel.design.serialization.codedomserializer.aspx

Автор: DragonFire 19.4.2009, 23:48
Включи описание интерфейса...
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlincludeattribute.aspx
Код

[XmlInclude(ISite)]

Или как-то так... если не скомпилится то typeof попробуй...

Автор: Kakadu 22.4.2009, 15:28
та же фигня.

Автор: PashaPash 22.4.2009, 16:24
Kakadu, вопрос - а зачем сериализовать UserControl и что ты под этим вообще понимаешь? У контрола есть свойство Parent - его сериализовать? А координаты контрола на форме?
Зачем вообще Graph - UserControl, это ж структура данных.

Автор: Kakadu 22.4.2009, 17:18
Я пытаюсь сотворить рисовалку графа в стиле Delphi.
http://ipicture.ru/Gallery/Viewfull/17768645.html
Идея была такая: если рисовать ребро просто соединяя линией две вершины, то несколько ребер, соединяющих две одинаковые вершины сольются и нарисуются друг на друге, поэтому появилась идея представлять ребро в виде ломаной (а потом модернизация - в виде кривой Безье). Но в этом случае у меня должно быть что-то за что можно зацепиться мышой и двигать; и ничего лучше как оформить это через уже существующий элемент управления я не придумал. 

Автор: PashaPash 22.4.2009, 17:54
Kakadu, отдели объект данных Граф от элемента управления Граф, то же для ребер и вершин. Я писал тебе об этом дней 9 назад, в http://forum.vingrad.ru/forum/topic-255144/anchor-entry1841225/30.html#). Хочешь автоматической перерисовки - реализуй в классах данных интерфейс INotifyPropertyChanged, или отдельные события для каждого свойства, подпишись на них в классах элементов управления.

Автор: Bogdan1024 23.4.2009, 13:39
Сериализуй данные, а не контрол, мэн.

Автор: Kakadu 25.4.2009, 16:45
Получается пока вот такое вот
http://ipicture.ru/
Теперь надо понять как к каждому элементу Графа привязать отдельный GraphElementControl. Наверное как-то через Dictionary....

P.S. Надо будет ещё как-то сделать чтобы вместе с GraphElementControl менялось какое-то свойство у Edge. Пробовал писать через байндинг, но запихивать это в модель графа не хочется. Наверное к GraphElementControl  надо будет добавлять ссылки на поля элементов графа. Только проблема в том что все эти поля не ссылки а value-type.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)