【问题标题】:WCF datacontract knowntype on base class基类上的 WCF 数据合同 knowntype
【发布时间】:2011-05-25 22:10:28
【问题描述】:

我在一个不需要了解任何其他项目的项目 (Comp.DataContracts) 中有一个数据合同。我有引用 Comp.DataContracts 的 Comp.ProjA,并且有一个派生类,它只是帮助填充数据合同的字段,但与数据合同无关。我想告诉通道使用我的派生类型作为参数进行服务调用,但将其序列化为基本类型。

由于我不希望服务或数据合同项目了解其他项目,我该怎么做?我可以明确告诉 datacontractserializer 序列化为基础而不是派生吗?我总是可以求助于工厂来填充并返回正确的类型,但希望不要这样做。

如果没有基类上的 KnownType,我该怎么做?想法?

【问题讨论】:

    标签: wcf serialization known-types


    【解决方案1】:

    如果基类型是具体的,您可以使用 IDataContractSurrogate 实现将 Derived 的所有实例序列化为 Base。否则我认为不改变基类添加[KnownType]或服务契约添加[ServiceKnownType]是不行的。

    【讨论】:

    • 谢谢。我会记住这一点,但它看起来比简单的工厂方法更难实现(对于我当前的需要)。
    【解决方案2】:

    您不能通过配置文件添加KnownType,以便DataContractSerializer 知道派生类型而不存在项目之间的硬依赖关系吗?这将意味着派生类型将是序列化类型。

    另一个选项是使用调用静态方法的 ServiceKnownType 属性,并在该方法中使用GetType(typename) 创建已知类型。如果派生类型不是项目或引用项目的一部分,即使基类型不是具体的,这也将允许 DCS 了解派生类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多