【问题标题】:How to I expose a type as a different name in WCF?如何在 WCF 中将类型公开为不同的名称?
【发布时间】:2011-09-06 09:46:32
【问题描述】:

我有课

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 公开类名“视频”,我需要公开 MediaItem。是否有任何面向对象的方法来解决这个问题(也许使用接口)?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      [DataContract(Name = "MyMediaItem")]
      

      请参阅herehere 了解更多详情。

      【讨论】:

        【解决方案3】:

        或者你可以让Video 继承自MediaItem 并使MediaItem 抽象。然后使用类定义上的KnownType 属性来指定实现。

        查看here了解更多信息

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-23
          • 2012-01-25
          相关资源
          最近更新 更多