| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Распределённые приложения и сеть > Сериализация структуры в общем компаненте. |
| Автор: Мурлыкатам_ 18.11.2007, 16:57 |
| Подскажите плз: 1. Хочу от клиента серверу передавать данные в виде структуры (пакета информации). 2. Для этого делаю структуру в общем компоненте для сервера и клиента, а мне компилятор пишет, что структуру невозможно сериализовать, как с этим бороться? и стоит ли? Или проще (все данные типа стринг) сплюсовать всё в одну строку, а на стороне сервера ее разобрать? |
| Автор: Мурлыкатам_ 19.11.2007, 19:29 |
| А недостаточно метки [Serializeble] ? И вообще, что такое сериализация в целом и почему это явление накладывает ограничения на работу с удаленными объектами? Структуры же не поддерживают наследование? Или может лучше просто сделать класс... Объект класса ведь можно передать в функцию как параметр? |
| Автор: tol05 20.11.2007, 16:54 | ||||||
не понял к чему это? Серилизация - это сохранение состояния (данных) в поток. Тип Int32 - структура, тоже не поддерживает наследования, но он же серилизуем!.. не всегда. Эсли структура содержит поля только серилизуемых типов, тогда да, достаточно. Но если
тогда хоть есть [Serializeble], хоть нет ... структура не будет серилизована. Поэтому и
|
| Автор: Мурлыкатам_ 22.11.2007, 19:38 | ||
почему не имеет, сделаю класс: MarshalByRefObject. И все никаких проблем с удаленным взаимодействием. Клиент вызывает удаленный метод класса и передает в него как параметр следующую структуру: struct ClientSendedData { int NumberOfSendingFiles; string ClientUNC; string[] FileAttributes; byte[] FileContent; bool ReWrite; } Данная структура записывается в удаленный класс, тот извращается над ней как ему надо, и дает знать, что готов принять следующую структуру. Так вот когда я пытаюсь передать эту структуру как параметр, Мне пишет ошибку - незя так делать, структура не сериализируема. |
| Автор: tol05 22.11.2007, 19:53 | ||
| ну а где атрибут [Serializable] ??? Ты же об это говорил
если нужно передать что-то куда-то, то: - для структур и классов можно юзать [Serializable] - тип маршаллизуется по значению или - для классов можно юзать наследование от MarshalByRefObject (для структур нельзя, это понятно) - тип маршаллизуется по ссылке больше вариантов нет Вот я и говорил. Что. Если ты юзаешь [Serializable], то можно и не делать классом. Класс это или структура - значения не имеет. |
| Автор: Мурлыкатам_ 23.11.2007, 23:56 |
| Ясно. Решил все параметры клеить в строку, передавать строку и байтовый массив Че париться?! Спасибо за помощь, надо почитать про сериализацию, потомучто я это слово никак не могу осознать.. |
| Автор: 1stain 24.11.2007, 00:04 |
| Мурлыкатам_, если это "не парицца", то что оно тогда по-твоему? |
| Автор: Мурлыкатам_ 25.11.2007, 19:14 |
В смысле? |
| Автор: 1stain 25.11.2007, 20:57 |
| Мурлыкатам_, назначение сериализации как раз в том и состоит, чтобу унифицировать сохранение состояния объекта и создание нового объекта из сохраненной информации. При этом не надо писать свои парсеры. Если тебе больше нравицца писать парсер - ради бога. Только учти, что в это как раз и есть "париться". |
| Автор: Мурлыкатам_ 27.11.2007, 14:51 | ||
| А че такое парсер? Все получилось со структурой.
Как я понял вызывающая сторона должна инициализировать все поля структуры? |