Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по Serializable, с внешними dll-ками 
:(
    Опции темы
Wanderer2019
Дата 13.1.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



а зачем ему вообще нужна эта dll-ка??? я так понимаю что он пытается добраться до той самой с VSSLib ddl-ки... но зачем??? я же подсоединил ее к нему через refference.
PM ICQ MSN   Вверх
Exception
Дата 13.1.2006, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(Wanderer2019 @ 13.1.2006, 16:20 Найти цитируемый пост)

я же подсоединил ее к нему через refference

Попробуй все-таки отрегить ее и опять зарегить. Помогает
PM   Вверх
mr.DUDA
Дата 13.1.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Wanderer2019 @ 13.1.2006, 14:20 Найти цитируемый пост)
а зачем ему вообще нужна эта dll-ка??? я так понимаю что он пытается добраться до той самой с VSSLib ddl-ки... но зачем??? я же подсоединил ее к нему через refference.

Может, есть сериализуемое свойство, в коде которого ты обращаешься к классам/функциям из этой dll ? Или сериализуемое поле с типом из этой dll ? Над такими свойствами и пропертями надо поставить атрибут NonSerializable


--------------------
user posted image
PM MAIL WWW   Вверх
Wanderer2019
Дата 13.1.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



В случае если я сеарелизую объект моего класса с пустым ArrayList`ом то все работает... и десеарелизуется... а когда там чего то есть то не пашет...

mr.DUDA
это всмысле как?? предположим в моем классе есть некоторые свойства и объекты классов
входяящих в эту длл-ку... т.е. если я не хочу их сеарилизовать.. а мне нужен только один объект (для которого я и писал surrogate) то перед остальными нужно ставить NonSerializable...
Добавлено @ 16:21
вообщем не знаю уже куда двигаться... простые примеры пробовал.. все работает... это не хочет:
Код

public class VSSItemClassSurrogate : ISerializationSurrogate
    {

        public VSSItemClassSurrogate()
        {
        }
        public void GetObjectData(object obj, SerializationInfo info, 
            StreamingContext context)
        {
            VSSItem item=obj as VSSItem;
            info.AddValue("Name", item.Name);
        }
        public object SetObjectData(object obj, SerializationInfo info, 
            StreamingContext context, ISurrogateSelector selector)
        {
                VSSItem item=obj as VSSItem;
                item.Name  = info.GetString("Name");
                return item;
        }
    }
    
[Serializable]
    public class VSS
    {
        public ArrayList FilesList=null;
        [NonSerialized()]
            private IVSSItems col=null;
        [NonSerialized()]
            private IVSSVersions versions=null;
//чего еще сюда писать не знаю
        public VSS()
        {
            FilesList=new ArrayList();
        }
        public void VssFindItem(VSSItem VssItem,string item)
        {
            VSSItem resItem;
            col = VssItem.get_Items(false);
            foreach(VSSItem eachItem in col)
            {    
                versions=eachItem.get_Versions(0);
                foreach(VSSVersion vs in versions)
                {
                    if(eachItem.Type==1&&vs.Label==item)
                    {
                        resItem=vs.VSSItem.get_Version(vs.VersionNumber);
                        FilesList.Add(resItem);
                        continue;
                    }
                }
                if(eachItem.Type==0)
                {
                    VssFindItem(eachItem,item);
                }
            }
        }
    }


в main идет слудующее:
Код

string password="";
SourceSafeTypeLib.VSSDatabaseClass data=new VSSDatabaseClass();
            data.Open(@"c:\\Program Files\\Microsoft Visual Studio\\VSS\\srcsafe.ini",Environment.UserName,password);
            SourceSafeTypeLib.VSSItem item=data.get_VSSItem("$/",false);
VSS myVss=new VSS();//его и нужно serialize в файл
            myVss.VssFindItem(item,"007");//отбирает объекты VSS по метке
SurrogateSelector ss = new SurrogateSelector();
            VSSItemClassSurrogate vss=new VSSItemClassSurrogate();
            ss.AddSurrogate(typeof(VSSItemClass), 
                new StreamingContext(StreamingContextStates.All), vss);

            Stream myFileStream = File.Create(@"C:\test\test.bin");
            BinaryFormatter serializer = new BinaryFormatter();
            serializer.SurrogateSelector=ss;
            serializer.Serialize(myFileStream, myVss);
            myFileStream.Close();

            Stream mynFileStream = File.OpenRead(@"C:\test\test.bin");
            VSS newVss =(VSS) serializer.Deserialize(mynFileStream);//выдает ошибку
            mynFileStream.Close();


smile smile smile

PM ICQ MSN   Вверх
arilou
Дата 13.1.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Wanderer2019
Вот честно скажи, зачем тебе сериализовать объект, взятый из type-library, тем более связанный с SourceSafe? Ведь после того, как ты его сохранишь, а через неделю восстановишь, состояние VSS уже давно изменится и объект будет неактуальным. Или VSS-сервер выключат. И зачем тогда было его сериализовать?

Поэтому сядь спокойно и подумай, чего ты хочешь добиться. А для систематизации своих мыслей можно все изложить письменно и запостить сюда smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Wanderer2019
Дата 13.1.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 7
Всего: 17



При сохранении объекта VSSItem сохранится и его версия... а следовательно ее можно будет взять из VSS (который хранит много версий одного и того же файла) не зависимо от того изменилось ли состояние VSS или нет.. просто добавятся новые версии... а интересующая меня версия останется. Таким образом преджполагалось иметь файлы с информацией о взятых из VSS модулях (полная информация). Ну предположим да... возможно просто описать свой класс... аналогичный VSSItem и сериализовать его. Но тогда теряется весь смысл. А именно просто имея ArrayList с объектами VSSItem вытащить интересующий меня из VSS =(. Таким образом хотел иметь архив файлов взятых из VSS для использования в соответствующем дестрибутиве.
PM ICQ MSN   Вверх
arilou
Дата 13.1.2006, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Wanderer2019 @ 13.1.2006, 16:43 Найти цитируемый пост)

А именно просто имея ArrayList с объектами VSSItem вытащить интересующий меня из VSS

Как вариант - вместо ArrayList с объектами VSSItem иметь ArrayList с твоими объектами VSSItemProxy, которые при первом обращении к любому своему свойству заново инициализируют внутри себя помеченный как [NonSerializable] VSSItem.

VSSItemProxy - это получится гибрид прокси с объектом-призраком (Мартин Фаулер рулит smile ) - virtual ghost proxy object smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0501 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.