Лучший отвечающий
Передача наследника в WCF

Вопрос
-
Добрый день. Вопрос такой. У меня есть класс User, есть класс наследник UserExtended. Есть метод в WCF сервисе который возвращает объект класса User:
[OperationContract] User SomeMethod()
Внутри метода я пользуюсь объектом класса UserExtended и пытаюсь его вернуть
public User SomeMethod() { UserExtended user = new UserEx() { Name = "name", LastName = "last name", ID = 30, ServirString = "some string", }; return user as User; }
При обращении с клиента получаю ошибку. Я так понимаю что это происходит из-за того что клиент получает объект класса наследника и пытается его десериализовать. Но суть в том что я не хочу передавать клиенту объект UserExtended, мне нужен именно User. Если создавать новый объект User копируя поля из UserExtended все работает, но подход очевидно не верный. Перегрузить операцию приведения для класса наследника мне не дает .net.
Я пробовал воспользоваться аттрибутом KnownType, но он требует реализовать этот тип на клиенте, а он там не нужен. Т.е. это противоречит смыслу передавать именно объект класса предка.
29 сентября 2012 г. 12:09
Ответы
-
Если Вам не нужно также передавать и сериализовывать производный класс, то можете попробовать установить [DataContract (Name = "User")] данный атрибут на производный класс.
- Предложено в качестве ответа Abolmasov DmitryModerator 2 октября 2012 г. 12:44
- Помечено в качестве ответа Abolmasov DmitryModerator 8 октября 2012 г. 6:41
29 сентября 2012 г. 12:46Модератор
Все ответы
-
А явное приведение Вы не пробовали
return (User)UserExtended;
попробуйте, должно работать.
- Изменено YatajgaModerator 29 сентября 2012 г. 12:25
29 сентября 2012 г. 12:24Модератор -
Пробовал. Не работает.
29 сентября 2012 г. 12:25 -
Если Вам не нужно также передавать и сериализовывать производный класс, то можете попробовать установить [DataContract (Name = "User")] данный атрибут на производный класс.
- Предложено в качестве ответа Abolmasov DmitryModerator 2 октября 2012 г. 12:44
- Помечено в качестве ответа Abolmasov DmitryModerator 8 октября 2012 г. 6:41
29 сентября 2012 г. 12:46Модератор -
Спасибо за идею. Попробую сегодня реализовать, посмотреть что получится. Но интересно почему не работает явное привидение. Это же классическое наследование.29 сентября 2012 г. 16:59
-
Скорее всего тут дело именно в сериализации, ведь сериализуется весь граф объекта.29 сентября 2012 г. 20:23Модератор
-
Привет.
Пожалуйста, не забывайте отмечать решение проблемы (кнопка "Пометить как ответ" под каждым сообщением).
Спасибо.
Для связи [mail]
2 октября 2012 г. 12:44Модератор