如何在WCF中将类型公开为其他名称?

时间:2011-09-06 09:46:32

标签: c# .net web-services wcf oop

我有一个班级

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

因为它通过WCF接口公开,我想重命名它(业务对象现在已被修改为封装音频和图像以及视频)。

所以我的解决方案是编写另一个继承自它的类:

class MediaItem : Video
{
}

我们有一个类似“工厂”的类,可以从数据库中获取视频。

public Video GetVideo(int videoId)
{
}

但是,当我打电话给以下人员时:

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

我收到错误:

无法将“视频”类型的对象转换为“MediaItem”。

我明白我不能这样做(将基类强制转换为子类)。那么解决方案是什么?

我无法通过WCF公开类名'Video',我需要公开MediaItem。是否有任何OO方法来解决这个问题(或许使用接口)?

如果不能,我可以在WCF属性中重命名对象吗?

3 个答案:

答案 0 :(得分:6)

Video应该继承自MediaItem,而不是相反。

您可以使用[DataContract(Name="YourName")]修饰该类,以提供您在代码中使用的其他名称。

答案 1 :(得分:0)

给定类型的数据协定的默认名称是该类型的名称。要覆盖默认值,请将DataContractAttribute的Name属性设置为备用名称。

[DataContract(Name = "MyMediaItem")]

有关详细信息,请参阅herehere

答案 2 :(得分:0)

或者您可以Video继承MediaItem并使MediaItem摘要。然后使用类定义上的KnownType属性来指定实现。

请参阅here了解详情