![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Приветствую!
Архитектура следующая: веб-сервис состоит в основном из одного класса - MonitoringEngine, который выполняет комманды ICommand. Типов комманд много и в момент выполнения MonitoringEngine'у неизвестно какая именно комманда выполняется. Он знает только интерфейс ICommand и ему этого достаточно для выполнения комманд. Метод, который выполняет комманды называется MonitoringEngine.perform(ICommand command). Oн возвращает объект класса CommandResponse, который содержит два поля: первое типа bool (успешно ли было выполнение комманды) и второе типа object, которое содержит объект результата выполнения комманды. Есть комманды у которых нет этого объекта (он null), есть комманды с различными классами объектов результата (список, какой-нибудь класс ...). Вопрос: Как сериализировать этот CommandResponse? Я не могу знать в момент выполнения какие именно данные содержит этот класс. Только самa комманда знает что ей необходимо вернуть в CommandResponse. Премного благодарен за любую помощь. С уважением, нейтрино. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 6 Всего: 170 |
Как вариант:
1 - Если поле типа object может содержать объект пользовательского типа - сделать этот тип серилизуемым (встроенные типы сами серилизуемые, так что там проблем не будет). Далее, после возврата объекта CommandResponse спокойно отдавать его серилизатору, он сам все проверит и серилизует 2 - рефлексия. Проверять поддерживает ли возвращенный объект интерфейс ISerializable и если да, отдавать его серилизатору. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
neutrino |
|
||||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Как сериализатор может знать что находится в поле типа object?
Может ему необходимо прописать что-то вроде:
-------------------- The truth comes from within ... Покойся с миром, Vit |
||||
|
|||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 2 Всего: 232 |
А он (десериализатор) и не знает, в отличие от сериализатора (которому доступна полная инфа о типах свойств и методов объекта). Что он может узнать по бинарному содержимому стрима ![]() -------------------- ![]() |
|||
|
||||
tol05 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 6 Всего: 170 |
Про десерилизатор разговора не было
![]() А о серилизаторе - действительно, лажу спорол, нет у них внутри Serialize() проверок на интерфейс. Реализаций может быть много. Например,
можно заменить на
в этом случае, если когда-нибудь добавится еще один вид коллекции или класса, не прийдется дописывать новые проверки или
или
или что-то еще в этом духе -------------------- На хорошей работе и сны хорошие снятся. |
||||||||
|
|||||||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |