在 WCF 中序列化继承类型的替代方法是什么



我想在WCF中使用继承的类型,但我不想在基类中添加所有类型的KnownType属性,因为基在另一个程序集中,也是为了避免依赖关系。 那么,还有什么其他方法可以实现这一目标呢?

我认为至少有两种方法可以做到这一点。

  1. 您可以创建自己的类 (DTO( 并将数据从其他程序集映射到您的类。对于映射,您可以使用自动映射器。它具有以下优点:

    • 您的通信层与您的逻辑分离(我假设另一个程序集包含逻辑(
    • 您将决定您的 API 的外观,并且您的协议不会在您不知情的情况下更改(我在这里假设另一个程序集是一个库或其他人负责它(。
  2. 您可以或多或少地将ServiceKnownType添加到您的服务合约界面中,如下所示(我没有测试代码(:

    [DataContract]
    public class BaseClass {}
    [DataContract]
    public class DerivedClass : BaseClass  {}
    [ServiceKnownType(typeof(BaseClass))]
    [ServiceKnownType(typeof(DerivedClass))]
    [ServiceContract()]
    public interface IYourContract
    {
    [OperationContract]
    BaseClass[] GetClasses();
    }
    

    有关更多信息,请查看此处的文档。确实有很好的例子。

哪个是贝特?

这取决于你需要什么。如果您正在开发原型,或者您需要快速做一些事情,请选择选项 2。如果您需要更可靠的解决方案,请选择选项 1。

还有更多指定已知类型的方法。其中之一是将它们放在您的配置文件中。这样,您的服务在编译时就不知道它们。但是为了序列化它们,它必须在运行时了解它们。

相关内容

最新更新