Как выставить тип как другое имя в WCF? - PullRequest
1 голос
/ 06 сентября 2011

У меня есть класс

class Video
{
   public string name;
   public string description;
}

И поскольку он предоставляется через интерфейс WCF, я хочу переименовать его (теперь бизнес-объект был изменен для инкапсуляции звука и изображений, а также видео).

Поэтому я решил написать еще один класс, который наследуется от него:

class MediaItem : Video
{
}

У нас есть «фабричный» класс, который получает видео из базы данных.

public Video GetVideo(int videoId)
{
}

Однако, когда я звоню следующее:

MediaItem itemToReturn = (MediaItem)contentManagerforPage.GetVideo(mediaId);

Я получаю ошибку:

Невозможно привести объект типа «Видео» к типу «MediaItem».

Я понимаю, что не могу этого сделать (привести базовый класс к подклассу). Так в чем же решение?

Я не могу предоставить имя класса 'Video' через WCF. Мне нужно предоставить MediaItem. Есть ли какой-либо ОО подход к этой проблеме (возможно, с использованием интерфейса)?

Если нет, я могу переименовать объект в атрибутах WCF?

Ответы [ 3 ]

6 голосов
/ 06 сентября 2011

Video должно наследоваться от MediaItem, а не наоборот.

Вы можете украсить класс с помощью [DataContract(Name="YourName")], чтобы указать другое имя, чем вы используете в коде.

0 голосов
/ 06 сентября 2011

Или вы можете сделать Video наследованным от MediaItem и сделать MediaItem абстрактным. Затем используйте атрибут KnownType в определении класса, чтобы указать реализации.

см. здесь для получения дополнительной информации

0 голосов
/ 06 сентября 2011

Имя по умолчанию для контракта данных для данного типа - это имя этого типа. Чтобы переопределить значение по умолчанию, установите для свойства Name объекта DataContractAttribute альтернативное имя.

[DataContract(Name = "MyMediaItem")]

См. здесь и здесь для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...