Привет.
Интересно есть-ли возможность сериализовать форму, т.е. чтобы получилось что-то вроде
<Form name="Form1" width="fgfg" ...>
<panel name="panel1"...>
<label name="label1" text="lalala" height="10" .../>
.....
</panel>
</Form1>
В лоб не получается, может есть какие-нибудь решения или где посмотреть ?
Здравствуйте AndrewVK, Вы писали:
AVK>Здравствуйте , Вы писали:
>>Привет. >>Интересно есть-ли возможность сериализовать форму, т.е. чтобы получилось что-то вроде
AVK>Посмотри на System.Xml.Serialization.XmlSerializer.
Это-то понятно. но когда пытаюсь сделать что-то вроде
Form1 f = new Form1();
serializer.Serialize(f)
вылезает эксепшн, что не может сериализовать ISite, потому что это интерфейс, или что-то вроде этого.
И вообще, приходит в голову, глядя на то как сама студия работает с формами, что может это и не делается так порсто. В студии-то похоже парсер какой-то генерит код для создания формы.
Или руками надо писать весь процесс сериализации ?
Здравствуйте ВПутин, Вы писали:
AVK>>Посмотри на System.Xml.Serialization.XmlSerializer.
ВП>Это-то понятно. но когда пытаюсь сделать что-то вроде
ВП>
ВП>Form1 f = new Form1();
ВП>serializer.Serialize(f)
ВП>
ВП>вылезает эксепшн, что не может сериализовать ISite, потому что это интерфейс, или что-то вроде этого.
А зачем нужно такое поведение? Можно унаследоваться от IXmlSerializable и написать реализицию там (хотя, смотря что нужно)...
ВП>И вообще, приходит в голову, глядя на то как сама студия работает с формами, что может это и не делается так порсто. В студии-то похоже парсер какой-то генерит код для создания формы.
System.ComponentModel.Design.Serialization.CodeDomSerializer?
ВП>Или руками надо писать весь процесс сериализации ?
Смотря куда сериализироваться.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
ВП>>Form1 f = new Form1();
ВП>>serializer.Serialize(f)
ВП>>
ВП>>вылезает эксепшн, что не может сериализовать ISite, потому что это интерфейс, или что-то вроде этого.
TK>А зачем нужно такое поведение? Можно унаследоваться от IXmlSerializable и написать реализицию там (хотя, смотря что нужно)...
Как раз такое поведение (эксепшн) мне и не нужно...
Я так понял, что мне надо наследовать свой класс от Form, и реализовывать в нём IXmlSerializable для того чтобы получить то, что выше писал ?
Здравствуйте Аноним, Вы писали:
А>В лоб не получается, может есть какие-нибудь решения или где посмотреть ?
Там все куда сложенее. Теперь формы сериализуются в код. Технология называется CodDom. Но про это статьи нужно писать, а то и книжки. В двух словах не объяснить.
Проще всего попробывать создать мало-мальски сложный контрол. С коллекциями и свойствами сложных типов. В кнце пути все становтся немножечко понятней. Но только чуть-чуть.
К следующему номеру RSDN Mag-а я попробую успеть написать статью о создании компонентов для VS.NET. Там будет много места уделено вопросам сериализации контролов в .NET.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, Вы писали:
VD>Здравствуйте Аноним, Вы писали:
А>>В лоб не получается, может есть какие-нибудь решения или где посмотреть ?
VD>Там все куда сложенее. Теперь формы сериализуются в код. Технология называется CodDom. Но про это статьи нужно писать, а то и книжки. В двух словах не объяснить.
На самом деле задача стояла такая: есть учётная программа. Раньше диалоги все валялись в ресурсах, ресурсы в DLL, DLL — и в BLOB'ах в базе. Когда юзер хотел диалог, программа проверяла версию DLL, закешированную в локале, если не совпадает, качаем BLOB, кладём на лок. диск поднимаем диалог и т.д.
Хотелось сделать на .NET что-нить подобное.
По-видимому в базе лучше и проще хранить сами сборки ?
Здравствуйте ВПутин, Вы писали:
ВП>Здравствуйте VladD2, Вы писали:
VD>>Здравствуйте Аноним, Вы писали:
А>>>В лоб не получается, может есть какие-нибудь решения или где посмотреть ?
VD>>Там все куда сложенее. Теперь формы сериализуются в код. Технология называется CodDom. Но про это статьи нужно писать, а то и книжки. В двух словах не объяснить.
ВП>На самом деле задача стояла такая: есть учётная программа. Раньше диалоги все валялись в ресурсах, ресурсы в DLL, DLL — и в BLOB'ах в базе. Когда юзер хотел диалог, программа проверяла версию DLL, закешированную в локале, если не совпадает, качаем BLOB, кладём на лок. диск поднимаем диалог и т.д. ВП>Хотелось сделать на .NET что-нить подобное. ВП>По-видимому в базе лучше и проще хранить сами сборки ?
Ну, очитывая, что в них лежит и ресурсы и код, то да.
Подключаешься к событию AppDomain.CurrentDomain.AssemblyLoad и по запросу скачиваешь нужные...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте ВПутин, Вы писали:
ВП>На самом деле задача стояла такая: есть учётная программа. Раньше диалоги все валялись в ресурсах, ресурсы в DLL, DLL — и в BLOB'ах в базе. Когда юзер хотел диалог, программа проверяла версию DLL, закешированную в локале, если не совпадает, качаем BLOB, кладём на лок. диск поднимаем диалог и т.д. ВП>Хотелось сделать на .NET что-нить подобное. ВП>По-видимому в базе лучше и проще хранить сами сборки ?
Несомненно... сборки это то что тебе нужно. В стаетье AVK про ремоутинг в многоуровнвых приложениях, как раз есть пример грузящий сборки с сервера. Его конечно нужно дорабатывать... контроль версий... инкриментальная скачка... и т.п. но как затрвка он в самый раз. А CodDom это для дизантайм-кодогенерации.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, Вы писали:
VD>Здравствуйте ВПутин, Вы писали:
VD>Несомненно... сборки это то что тебе нужно. В стаетье AVK про ремоутинг в многоуровнвых приложениях, как раз есть пример грузящий сборки с сервера. Его конечно нужно дорабатывать... контроль версий... инкриментальная скачка... и т.п. но как затрвка он в самый раз. А CodDom это для дизантайм-кодогенерации.
Здравствуйте ВПутин, Вы писали:
ВП>А что-за чудо статья такая ? где взять ?
Ну, не чудо, а обычная статья о создании контролов и компонентов для .NET. Выйдет в RSDN Magazine #2 за этот год. В ней я постатраюсь описать процесс сериализации контролов, но к твоей задаче больше подойдет копирование с сервера и запуск готовх сборок.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте AndrewVK, Вы писали:
>>Интересно есть-ли возможность сериализовать форму, т.е. чтобы получилось что-то вроде
AVK>Посмотри на System.Xml.Serialization.XmlSerializer.
Ню-ню.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте TK, Вы писали:
TK>А зачем нужно такое поведение? Можно унаследоваться от IXmlSerializable и написать реализицию там (хотя, смотря что нужно)...
Ты действительно не понимешь? Человек хочет контейнер написать свой. А то вон КДев. среда как среда, а дизайнера форм нет.
TK>System.ComponentModel.Design.Serialization.CodeDomSerializer?
Гы-гы. Он самый. Но там еще кое какой код есть и он весь в сборках VS.
TK>Смотря куда сериализироваться.
А код дом умеет исключительно в код. Ну на крайний случай в хмл как в асп.нэт.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте VladD2, Вы писали:
TK>>А зачем нужно такое поведение? Можно унаследоваться от IXmlSerializable и написать реализицию там (хотя, смотря что нужно)...
VD>Ты действительно не понимешь? Человек хочет контейнер написать свой. А то вон КДев. среда как среда, а дизайнера форм нет.
Изначально он написал пример, где XML был... Ему и предложили как сделать подобное... А о создании дизайнеров форм и речи не было... Но, если очень хочется — SharpDevelop там и дизайнер и OpenSource.
TK>>System.ComponentModel.Design.Serialization.CodeDomSerializer?
VD>Гы-гы. Он самый. Но там еще кое какой код есть и он весь в сборках VS.
Ну мало-ли может человек свою среду пишет и хочет одинобразия...
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Здравствуйте TK, Вы писали:
TK>Изначально он написал пример, где XML был... Ему и предложили как сделать подобное... А о создании дизайнеров форм и речи не было... Но, если очень хочется — SharpDevelop там и дизайнер и OpenSource.
Если не ошибаюсь именно его я и смотрел. Редактор там на троечку, а дизайнера вообще нет. Но может я не о нем. Дай ссылку...
TK>Ну мало-ли может человек свою среду пишет и хочет одинобразия...
Тогда я бы посоветовал ему запостить анакрином, изучить мсил и попробывать написать пару тройку продвинутых контролов. Тогда понимаение со временем прийдет.
PS
Сериавизовать в хмл можно только контролы созданные тобой. Ито это дикий геморой. Ну, не заточены они под это. Создание серьезного CodDom-сериалайзера задача ввобще не из легких, но это единственный грамотный выход. Можно конечно ручками сахранять состояние контролов в хмл-е пользуясь правилами похожими на VS-ные, но 100%-ой совместимости добиться будет невозможно. Хотя простые контролы тах сериализовать можно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.