C# 如何在WCF中将类型公开为不同的名称?

C# 如何在WCF中将类型公开为不同的名称?,c#,.net,web-services,wcf,oop,C#,.net,Web Services,Wcf,Oop,我有一节课 class Video { public string name; public string description; } 因为它是通过WCF接口公开的,所以我想对它进行重命名(业务对象现在已经被修改为封装音频和图像以及视频) 因此,我的解决方案是编写另一个从中继承的类: class MediaItem : Video { } 我们有一个类似“工厂”的类,可以从数据库中获取视频 public Video GetVideo(int videoId) { } 但是,当

我有一节课

class Video
{
   public string name;
   public string description;
}
因为它是通过WCF接口公开的,所以我想对它进行重命名(业务对象现在已经被修改为封装音频和图像以及视频)

因此,我的解决方案是编写另一个从中继承的类:

class MediaItem : Video
{
}
我们有一个类似“工厂”的类,可以从数据库中获取视频

public Video GetVideo(int videoId)
{
}
但是,当我调用以下命令时:

MediaItem itemToReturn = (MediaItem)contentManagerforPage.GetVideo(mediaId);
我得到一个错误:

无法将“Video”类型的对象强制转换为“MediaItem”类型

我知道我不能这样做(将基类转换为子类)。那么解决方案是什么呢

我无法通过WCF公开类名“Video”,我需要公开MediaItem。有没有面向对象的方法来解决这个问题(可能使用接口)


如果没有,我可以重命名WCF属性中的对象吗?

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


您可以使用
[DataContract(Name=“YourName”)]
来装饰类,以提供代码中未使用的名称。

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


您可以使用
[DataContract(Name=“YourName”)]
来修饰类,以提供代码中未使用的名称。

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

[DataContract(Name = "MyMediaItem")]

有关详细信息,请参阅和。

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

[DataContract(Name = "MyMediaItem")]

有关更多详细信息,请参见和。

或者您可以使
视频
继承自
媒体项目
,并使
媒体项目
抽象化。然后使用类定义上的
KnownType
属性指定实现


有关更多信息,请参见,或者您可以使
视频
媒体项
继承,并使
媒体项
抽象化。然后使用类定义上的
KnownType
属性指定实现

有关更多信息,请参阅