![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| retto |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 167 Регистрация: 30.10.2007 Где: Кривой Рог, Украи на Репутация: нет Всего: нет |
вопрос по сериализации класса для передачи по WCF
есть интерфейс IMyDescription который описывает некие методы. есть класс MyDescription который реализует вышеуказанный интерфейс. клиент отправляет на сервер этот класс. Всё нормально, все работает отлично. далее у нас есть класс MyDescriptionExtended который расширяет MyDescription. Дак вот в чем проблема, когда я хочу передать этот класс на сервер, WCF выдает ошибку типа "тип MyDescriptionExtended не ожидается", это логично, поскольку в KnowType тип MyDescriptionExtended не указан, поскольку находится в другой сборке. И вопрос по сути: как его заставить при передачи класса MyDescriptionExtended сериализировать базовый класс MyDescription ? |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Ну либо делаешь метод который работает с конкретным типом, либо используешь кастомный KnowType. KnowType можно помечать не только сам класс, но и сервис и, кажется, отдельный метод. Также, можно сделать статический метод в любом месте кода и указать его в KnowType, который бы реализовывал более сложную логику по определению типов.
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| retto |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 167 Регистрация: 30.10.2007 Где: Кривой Рог, Украи на Репутация: нет Всего: нет |
-Mikle-,
нельзя, сервер незнает(и не должен) об этом типе ровно ничего, знает только о MyDescription класс MyDescriptionExtended находится в другой сборке, и reference кинут так, что нельзя указать KnowType |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Ты видимо не до конца понял, что я имею ввиду. Или я не понял.
Как я понимаю щас: у тебя есть MyDescription в Ассембли1. Есть его наследник MyDescriptionExtended в Ассембли2 (ссылка на Ассембли1 разумеется). Тебе надо добавить наунтайп к MyDescription, но ты типа не можешь этого сделать потому что из Ассембли1 естественно не видно Ассебли2. Так? Если да, то: 1) Можно добавить наунтайп через конфиг сервиса (в самом конце есть пример), так как сервису они известны оба. А тут структура и описание секции конфига. 2) Можно применить атрибут, как я уже сказал, к сервису (ServiceKnownType) и там указать MyDescriptionExtended. 3) Если уж совсем плохо, то DataContractResolver спасет в любом случае. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| retto |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 167 Регистрация: 30.10.2007 Где: Кривой Рог, Украи на Репутация: нет Всего: нет |
попробую объяснить по-другому. 1. Есть класс M1 2. Есть класс M2 : M1 3. Есть метод DoSomething(M1 m1); дак вот, хочу сделать так, чтобы когда я вызываю метод DoSomething и передаю туда M2 он сериализировался по базовому классу. Другая сторона, тобишь сервер ничего(!) незнает о классе M2. кажись расписал понятно. |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
То есть на сервере тебе и не надо ничего от М2?
Тогда попробуй обмануть так:
Может прокатить по идее. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| retto |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 167 Регистрация: 30.10.2007 Где: Кривой Рог, Украи на Репутация: нет Всего: нет |
||||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
А ты смотрел DataContractResolver? Я давал ссылку выше. Может с ним получится. Если нет, то ничего кроме как создать экземпляр M1 (если он создаваемый) и скопировать значения свойств из M2 пока не вижу.
А в прошлом эксперименте ты Namespace правильно задавал? -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| retto |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 167 Регистрация: 30.10.2007 Где: Кривой Рог, Украи на Репутация: нет Всего: нет |
||||
|
||||
| retto |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 167 Регистрация: 30.10.2007 Где: Кривой Рог, Украи на Репутация: нет Всего: нет |
заюзал DataContractResolver и .Net Framework 4
все работает, всем спасибо |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |