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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сериализация структуры в общем компаненте. 
V
    Опции темы
Мурлыкатам_
Дата 18.11.2007, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



Подскажите плз:
1. Хочу от клиента серверу передавать данные в виде структуры (пакета информации).
2. Для этого делаю структуру в общем компоненте для сервера и клиента, а мне компилятор пишет, что структуру невозможно сериализовать, как с этим бороться? и стоит ли?

Или проще (все данные типа стринг) сплюсовать всё в одну строку, а на стороне сервера ее разобрать?


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
1stain
Дата 18.11.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: нет
Всего: 40



Цитата(Мурлыкатам_ @  18.11.2007,  16:57 Найти цитируемый пост)
 структуру невозможно сериализовать, как с этим бороться? и стоит ли?

бороцца с этим безусловно стоит. А вся борьба скорее всего будет заключатся в применении к структуре атрибута SerializableAttribute 
Если атрибут уже все-таки применили, то желательно посмотреть код структуры


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
Мурлыкатам_
Дата 19.11.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



А недостаточно метки [Serializeble] ?

И вообще, что такое сериализация в целом и почему это явление накладывает ограничения на работу с удаленными объектами?
Структуры же не поддерживают наследование?

Или может лучше просто сделать класс... Объект класса ведь можно передать в функцию как параметр?

Это сообщение отредактировал(а) Мурлыкатам_ - 19.11.2007, 19:31


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
tol05
Дата 20.11.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 6
Всего: 170



Цитата(Мурлыкатам_ @  19.11.2007,  18:29 Найти цитируемый пост)
И вообще, что такое сериализация в целом и почему это явление накладывает ограничения на работу с удаленными объектами?
Структуры же не поддерживают наследование?

не понял к чему это? Серилизация - это сохранение состояния (данных) в поток. Тип Int32 - структура, тоже не поддерживает наследования, но он же серилизуем!..

Цитата(Мурлыкатам_ @  19.11.2007,  18:29 Найти цитируемый пост)
А недостаточно метки [Serializeble] ?

не всегда. Эсли структура содержит поля только серилизуемых типов, тогда да, достаточно. Но если 
Код

struct S
{
    int x;
    bool b;
    MyClass myC;  //А этот класс не поддерживает серилизацию!
}

тогда хоть есть [Serializeble], хоть нет ... структура не будет серилизована. Поэтому и
Цитата(1stain @  18.11.2007,  18:58 Найти цитируемый пост)
желательно посмотреть код структуры


Цитата(Мурлыкатам_ @  19.11.2007,  18:29 Найти цитируемый пост)
Или может лучше просто сделать класс... Объект класса ведь можно передать в функцию как параметр?
это не имеет никакого значения. Смотри предыдущее предложение.



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Мурлыкатам_
Дата 22.11.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



Цитата

это не имеет никакого значения. Смотри предыдущее предложение.


почему не имеет, сделаю класс: MarshalByRefObject. И все никаких проблем с удаленным взаимодействием.

Клиент вызывает удаленный метод класса и передает в него как параметр следующую структуру:

 struct ClientSendedData
    {
        int NumberOfSendingFiles;
        string ClientUNC;
        string[] FileAttributes;
        byte[] FileContent;
        bool ReWrite;
    }
Данная структура записывается в удаленный класс, тот извращается над ней как ему надо, и дает знать, что готов принять следующую структуру. Так вот когда я пытаюсь передать эту структуру как параметр, Мне пишет ошибку - незя так делать, структура не сериализируема.


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
tol05
Дата 22.11.2007, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 6
Всего: 170



ну а где атрибут [Serializable] ???
Ты же об это говорил

Цитата(Мурлыкатам_ @  19.11.2007,  18:29 Найти цитируемый пост)
А недостаточно метки [Serializeble] ?

....

Или может лучше просто сделать класс
... Объект класса ведь можно передать в функцию как параметр?


если нужно передать что-то куда-то, то:
- для структур и классов можно юзать [Serializable]  - тип маршаллизуется по значению
или
- для классов можно юзать наследование от MarshalByRefObject (для структур нельзя, это понятно) - тип маршаллизуется по ссылке
больше вариантов нет

Вот я и говорил. 
Что.
Если ты юзаешь [Serializable], то можно и не делать классом. Класс это или структура - значения не имеет.




--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Мурлыкатам_
Дата 23.11.2007, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



Ясно.
Решил все параметры клеить в строку, передавать строку и байтовый массив  smile 
Че париться?!  smile 

Спасибо за помощь, надо почитать про сериализацию, потомучто я это слово никак не могу осознать..



--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
1stain
Дата 24.11.2007, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: нет
Всего: 40



Мурлыкатам_, если это "не парицца", то что оно тогда по-твоему?


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
Мурлыкатам_
Дата 25.11.2007, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



Цитата(1stain @  24.11.2007,  00:04 Найти цитируемый пост)
Мурлыкатам_, если это "не парицца", то что оно тогда по-твоему?


В смысле?


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
1stain
Дата 25.11.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: нет
Всего: 40



Мурлыкатам_, назначение сериализации как раз в том и состоит, чтобу унифицировать сохранение состояния объекта и создание нового объекта из сохраненной информации. При этом не надо писать свои парсеры. 
Если тебе больше нравицца писать парсер - ради бога. Только учти, что в это как раз и есть "париться".


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
Мурлыкатам_
Дата 27.11.2007, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 2



А че такое парсер?

Все получилось со структурой.

Код

[Serializable]
        public struct Package
        {
            public int a;
            public int b;
            public byte[] content;
            public string name;
        }

       public  void GetPack(Package pk)
        {
            Console.WriteLine("invoked");

            Package pg = new Package();
            pg.content = pk.content;
            Console.WriteLine("pk.a = " + pg.a);
            Console.WriteLine("pk.content.length = " + pg.content.Length);
            
        }


Как я понял вызывающая сторона должна инициализировать все поля структуры?

Это сообщение отредактировал(а) Мурлыкатам_ - 27.11.2007, 15:24


--------------------
Хочешь что-то сделать - сделай это сам или попроси помощи на винграде smile
user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




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


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

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