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
属性指定实现
有关更多信息,请参阅