![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Wanderer2019 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
Всем привет!
Хотел интересующую меня информацию запихнуть в двоичный файл. Есть Класс который я для себя написал. Перед классом поставил аттрибут [Serializable] т.е. имеем объект
При написании этого класса учавствовала dll-ка SourceSafeTypeLib. При попытке
Выскакивает Exception: The type SourceSafeTypeLib.VSSItemClass in Assembly Interop.SourceSafeTypeLib, Version=5.1.0.0, Culture=neutral, PublicKeyToken=null is not marked as serializable. Значит ли это, что сериализовать объект МОЕГО класса в файл не представляется возможным??? |
||||
|
|||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Приведи код класса. Ты не сможешь сериализовать VSSItemaClass
|
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
using SourceSafeTypeLib;
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Напиши обертку для VSSItemClass с Serializable. И юзай ее в аррайлисте
|
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
Обертку???
можно пример какой нить простенькой обертки |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Это сообщение отредактировал(а) Exception - 12.1.2006, 18:33 |
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
а методы нужно как нибудь оборачивать???
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Не, зачем? Разве что ты их вызывать будешь
|
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
ну вот смотри я там метод VSSItem вызываю:
ну вот... в данном слчае get_Versions(int) каким то образом оборачивать не надо? Exception Спасибо за помощь! |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Не, не нужно. Суть в том, что вместо несериализуемых итемов сериализуется твой класс.
|
|||
|
||||
| dronzo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 26.11.2005 Где: Москва Репутация: 6 Всего: 8 |
М-да. Сейчас пока просматривал заметки, наткнулся на такую штуку, как ISerializationSurrogate (it provides you the ability to serialize a type that was not originally designed to be serialized). Сам только что наткнулся, так что вряд ли много смогу помочь, но сам вникаю. Посмотри в MSDN что и как , а я сейчас на коленке попробую накатать, так что не обессудь. Заодно и сам проверю, как понял
PS Будет работать или нет - не знаю Это сообщение отредактировал(а) dronzo - 12.1.2006, 22:55 |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Супер! +1
|
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
вот нашел простой пример по этому поводу:
http://www.codeproject.com/dotnet/Surrogat...rialization.asp Всем спасибо! Попробую поставить + =) |
|||
|
||||
| Wanderer2019 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
Вот что у меня в результате всего этого получилось.
Написал этот surrogate пока что хотя бы на одно поле (остальные там все все равно только read only так что не знаю как с ними быть). имеем:
в main-имеем:
это все отрабатывает без вопросов. в файл чего то там пишет. а вот де-сеарелизация не работает =( я пытаюсь так:
Говорит COM object with CLSID {783CD4E3-9D54-11CF-B8EE-00608CC9A71F} is either not valid or not registered. не понимаю что это такое? что он пытается найти по этому ключу???? |
||||||
|
|||||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
Проверь правильность регистрации dll-ки.
Набери regsvr32.exe -путь к dll- |
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
а зачем ему вообще нужна эта dll-ка??? я так понимаю что он пытается добраться до той самой с VSSLib ddl-ки... но зачем??? я же подсоединил ее к нему через refference.
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
||||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Может, есть сериализуемое свойство, в коде которого ты обращаешься к классам/функциям из этой dll ? Или сериализуемое поле с типом из этой dll ? Над такими свойствами и пропертями надо поставить атрибут NonSerializable -------------------- ![]() |
|||
|
||||
| Wanderer2019 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
В случае если я сеарелизую объект моего класса с пустым ArrayList`ом то все работает... и десеарелизуется... а когда там чего то есть то не пашет...
mr.DUDA это всмысле как?? предположим в моем классе есть некоторые свойства и объекты классов входяящих в эту длл-ку... т.е. если я не хочу их сеарилизовать.. а мне нужен только один объект (для которого я и писал surrogate) то перед остальными нужно ставить NonSerializable... Добавлено @ 16:21 вообщем не знаю уже куда двигаться... простые примеры пробовал.. все работает... это не хочет:
в main идет слудующее:
|
||||
|
|||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Wanderer2019
Вот честно скажи, зачем тебе сериализовать объект, взятый из type-library, тем более связанный с SourceSafe? Ведь после того, как ты его сохранишь, а через неделю восстановишь, состояние VSS уже давно изменится и объект будет неактуальным. Или VSS-сервер выключат. И зачем тогда было его сериализовать? Поэтому сядь спокойно и подумай, чего ты хочешь добиться. А для систематизации своих мыслей можно все изложить письменно и запостить сюда |
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
При сохранении объекта VSSItem сохранится и его версия... а следовательно ее можно будет взять из VSS (который хранит много версий одного и того же файла) не зависимо от того изменилось ли состояние VSS или нет.. просто добавятся новые версии... а интересующая меня версия останется. Таким образом преджполагалось иметь файлы с информацией о взятых из VSS модулях (полная информация). Ну предположим да... возможно просто описать свой класс... аналогичный VSSItem и сериализовать его. Но тогда теряется весь смысл. А именно просто имея ArrayList с объектами VSSItem вытащить интересующий меня из VSS =(. Таким образом хотел иметь архив файлов взятых из VSS для использования в соответствующем дестрибутиве.
|
|||
|
||||
| arilou |
|
|||
![]() Великий МунаБудвин ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2646 Регистрация: 15.7.2004 Где: город-герой Минск Репутация: 21 Всего: 61 |
Как вариант - вместо ArrayList с объектами VSSItem иметь ArrayList с твоими объектами VSSItemProxy, которые при первом обращении к любому своему свойству заново инициализируют внутри себя помеченный как [NonSerializable] VSSItem. VSSItemProxy - это получится гибрид прокси с объектом-призраком (Мартин Фаулер рулит |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |