Сериализация Windows.Forms.Form
От: Аноним  
Дата: 12.09.02 10:20
Оценка:
Привет.
Интересно есть-ли возможность сериализовать форму, т.е. чтобы получилось что-то вроде
<Form name="Form1" width="fgfg" ...>
<panel name="panel1"...>
<label name="label1" text="lalala" height="10" .../>
.....
</panel>
</Form1>
В лоб не получается, может есть какие-нибудь решения или где посмотреть ?
Re: Сериализация Windows.Forms.Form
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.09.02 10:33
Оценка:
Здравствуйте , Вы писали:

>Привет.

>Интересно есть-ли возможность сериализовать форму, т.е. чтобы получилось что-то вроде

Посмотри на System.Xml.Serialization.XmlSerializer.
... << J 1.0 alpha 5 >>
AVK Blog
Re[2]: Сериализация Windows.Forms.Form
От: ВПутин  
Дата: 12.09.02 13:27
Оценка:
Здравствуйте AndrewVK, Вы писали:

AVK>Здравствуйте , Вы писали:


>>Привет.

>>Интересно есть-ли возможность сериализовать форму, т.е. чтобы получилось что-то вроде

AVK>Посмотри на System.Xml.Serialization.XmlSerializer.


Это-то понятно. но когда пытаюсь сделать что-то вроде

Form1 f = new Form1();
serializer.Serialize(f)

вылезает эксепшн, что не может сериализовать ISite, потому что это интерфейс, или что-то вроде этого.
И вообще, приходит в голову, глядя на то как сама студия работает с формами, что может это и не делается так порсто. В студии-то похоже парсер какой-то генерит код для создания формы.
Или руками надо писать весь процесс сериализации ?
Re[3]: Сериализация Windows.Forms.Form
От: TK Лес кывт.рф
Дата: 12.09.02 13:50
Оценка:
Здравствуйте ВПутин, Вы писали:

AVK>>Посмотри на System.Xml.Serialization.XmlSerializer.


ВП>Это-то понятно. но когда пытаюсь сделать что-то вроде


ВП>
ВП>Form1 f = new Form1();
ВП>serializer.Serialize(f)
ВП>

ВП>вылезает эксепшн, что не может сериализовать ISite, потому что это интерфейс, или что-то вроде этого.

А зачем нужно такое поведение? Можно унаследоваться от IXmlSerializable и написать реализицию там (хотя, смотря что нужно)...

ВП>И вообще, приходит в голову, глядя на то как сама студия работает с формами, что может это и не делается так порсто. В студии-то похоже парсер какой-то генерит код для создания формы.


System.ComponentModel.Design.Serialization.CodeDomSerializer?

ВП>Или руками надо писать весь процесс сериализации ?


Смотря куда сериализироваться.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[4]: Сериализация Windows.Forms.Form
От: ВПутин  
Дата: 12.09.02 14:41
Оценка:
Здравствуйте TK, Вы писали:

ВП>>
ВП>>Form1 f = new Form1();
ВП>>serializer.Serialize(f)
ВП>>

ВП>>вылезает эксепшн, что не может сериализовать ISite, потому что это интерфейс, или что-то вроде этого.

TK>А зачем нужно такое поведение? Можно унаследоваться от IXmlSerializable и написать реализицию там (хотя, смотря что нужно)...


Как раз такое поведение (эксепшн) мне и не нужно...
Я так понял, что мне надо наследовать свой класс от Form, и реализовывать в нём IXmlSerializable для того чтобы получить то, что выше писал ?
Re: Сериализация Windows.Forms.Form
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.09.02 23:28
Оценка:
Здравствуйте Аноним, Вы писали:

А>В лоб не получается, может есть какие-нибудь решения или где посмотреть ?


Там все куда сложенее. Теперь формы сериализуются в код. Технология называется CodDom. Но про это статьи нужно писать, а то и книжки. В двух словах не объяснить.

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

К следующему номеру RSDN Mag-а я попробую успеть написать статью о создании компонентов для VS.NET. Там будет много места уделено вопросам сериализации контролов в .NET.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Сериализация Windows.Forms.Form
От: ВПутин  
Дата: 13.09.02 11:34
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Здравствуйте Аноним, Вы писали:


А>>В лоб не получается, может есть какие-нибудь решения или где посмотреть ?


VD>Там все куда сложенее. Теперь формы сериализуются в код. Технология называется CodDom. Но про это статьи нужно писать, а то и книжки. В двух словах не объяснить.


На самом деле задача стояла такая: есть учётная программа. Раньше диалоги все валялись в ресурсах, ресурсы в DLL, DLL — и в BLOB'ах в базе. Когда юзер хотел диалог, программа проверяла версию DLL, закешированную в локале, если не совпадает, качаем BLOB, кладём на лок. диск поднимаем диалог и т.д.
Хотелось сделать на .NET что-нить подобное.
По-видимому в базе лучше и проще хранить сами сборки ?
Re[3]: Сериализация Windows.Forms.Form
От: TK Лес кывт.рф
Дата: 13.09.02 12:12
Оценка:
Здравствуйте ВПутин, Вы писали:

ВП>Здравствуйте VladD2, Вы писали:


VD>>Здравствуйте Аноним, Вы писали:


А>>>В лоб не получается, может есть какие-нибудь решения или где посмотреть ?


VD>>Там все куда сложенее. Теперь формы сериализуются в код. Технология называется CodDom. Но про это статьи нужно писать, а то и книжки. В двух словах не объяснить.


ВП>На самом деле задача стояла такая: есть учётная программа. Раньше диалоги все валялись в ресурсах, ресурсы в DLL, DLL — и в BLOB'ах в базе. Когда юзер хотел диалог, программа проверяла версию DLL, закешированную в локале, если не совпадает, качаем BLOB, кладём на лок. диск поднимаем диалог и т.д.

ВП>Хотелось сделать на .NET что-нить подобное.
ВП>По-видимому в базе лучше и проще хранить сами сборки ?

Ну, очитывая, что в них лежит и ресурсы и код, то да.
Подключаешься к событию AppDomain.CurrentDomain.AssemblyLoad и по запросу скачиваешь нужные...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[3]: Сериализация Windows.Forms.Form
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.09.02 04:40
Оценка:
Здравствуйте ВПутин, Вы писали:

ВП>На самом деле задача стояла такая: есть учётная программа. Раньше диалоги все валялись в ресурсах, ресурсы в DLL, DLL — и в BLOB'ах в базе. Когда юзер хотел диалог, программа проверяла версию DLL, закешированную в локале, если не совпадает, качаем BLOB, кладём на лок. диск поднимаем диалог и т.д.

ВП>Хотелось сделать на .NET что-нить подобное.
ВП>По-видимому в базе лучше и проще хранить сами сборки ?

Несомненно... сборки это то что тебе нужно. В стаетье AVK про ремоутинг в многоуровнвых приложениях, как раз есть пример грузящий сборки с сервера. Его конечно нужно дорабатывать... контроль версий... инкриментальная скачка... и т.п. но как затрвка он в самый раз. А CodDom это для дизантайм-кодогенерации.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Сериализация Windows.Forms.Form
От: ВПутин  
Дата: 16.09.02 09:25
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Здравствуйте ВПутин, Вы писали:



VD>Несомненно... сборки это то что тебе нужно. В стаетье AVK про ремоутинг в многоуровнвых приложениях, как раз есть пример грузящий сборки с сервера. Его конечно нужно дорабатывать... контроль версий... инкриментальная скачка... и т.п. но как затрвка он в самый раз. А CodDom это для дизантайм-кодогенерации.


А что-за чудо статья такая ? где взять ?
Re[5]: Сериализация Windows.Forms.Form
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.09.02 09:40
Оценка:
Здравствуйте ВПутин, Вы писали:

ВП>А что-за чудо статья такая ? где взять ?


Ну, не чудо, а обычная статья о создании контролов и компонентов для .NET. Выйдет в RSDN Magazine #2 за этот год. В ней я постатраюсь описать процесс сериализации контролов, но к твоей задаче больше подойдет копирование с сервера и запуск готовх сборок.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Сериализация Windows.Forms.Form
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.09.02 14:06
Оценка:
Здравствуйте AndrewVK, Вы писали:

>>Интересно есть-ли возможность сериализовать форму, т.е. чтобы получилось что-то вроде


AVK>Посмотри на System.Xml.Serialization.XmlSerializer.


Ню-ню.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Сериализация Windows.Forms.Form
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.09.02 14:10
Оценка:
Здравствуйте TK, Вы писали:

TK>А зачем нужно такое поведение? Можно унаследоваться от IXmlSerializable и написать реализицию там (хотя, смотря что нужно)...


Ты действительно не понимешь? Человек хочет контейнер написать свой. А то вон КДев. среда как среда, а дизайнера форм нет.

TK>System.ComponentModel.Design.Serialization.CodeDomSerializer?


Гы-гы. Он самый. Но там еще кое какой код есть и он весь в сборках VS.

TK>Смотря куда сериализироваться.


А код дом умеет исключительно в код. Ну на крайний случай в хмл как в асп.нэт.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Сериализация Windows.Forms.Form
От: TK Лес кывт.рф
Дата: 16.09.02 14:20
Оценка:
Здравствуйте VladD2, Вы писали:

TK>>А зачем нужно такое поведение? Можно унаследоваться от IXmlSerializable и написать реализицию там (хотя, смотря что нужно)...


VD>Ты действительно не понимешь? Человек хочет контейнер написать свой. А то вон КДев. среда как среда, а дизайнера форм нет.


Изначально он написал пример, где XML был... Ему и предложили как сделать подобное... А о создании дизайнеров форм и речи не было... Но, если очень хочется — SharpDevelop там и дизайнер и OpenSource.

TK>>System.ComponentModel.Design.Serialization.CodeDomSerializer?


VD>Гы-гы. Он самый. Но там еще кое какой код есть и он весь в сборках VS.


Ну мало-ли может человек свою среду пишет и хочет одинобразия...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[6]: Сериализация Windows.Forms.Form
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.09.02 14:35
Оценка:
Здравствуйте TK, Вы писали:

TK>Изначально он написал пример, где XML был... Ему и предложили как сделать подобное... А о создании дизайнеров форм и речи не было... Но, если очень хочется — SharpDevelop там и дизайнер и OpenSource.


Если не ошибаюсь именно его я и смотрел. Редактор там на троечку, а дизайнера вообще нет. Но может я не о нем. Дай ссылку...

TK>Ну мало-ли может человек свою среду пишет и хочет одинобразия...


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

PS

Сериавизовать в хмл можно только контролы созданные тобой. Ито это дикий геморой. Ну, не заточены они под это. Создание серьезного CodDom-сериалайзера задача ввобще не из легких, но это единственный грамотный выход. Можно конечно ручками сахранять состояние контролов в хмл-е пользуясь правилами похожими на VS-ные, но 100%-ой совместимости добиться будет невозможно. Хотя простые контролы тах сериализовать можно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.