【问题标题】:Abstract Class Inheritance & Data Contracts抽象类继承和数据契约
【发布时间】:2011-06-15 11:17:41
【问题描述】:

我有一个abstract class BaseClass,我想与class ClassA : BaseClassclass ClassB : BaseClass 共享两个属性。但是,我希望ClassAClassB 都被标记为DataContractAttribute,这样从BaseClass 继承的成员也可以在合同中公开。但是,我不希望 BaseClass 本身作为数据合同公开。这在 WCF (.NET 3.5) 中可行吗?

【问题讨论】:

    标签: c# wcf .net-3.5


    【解决方案1】:

    不,AFAIK 这是不可能的。即使你new 属性来添加数据成员标记它仍然会抱怨:

    类型“BaseClass”无法序列化。考虑使用 DataContractAttribute 属性对其进行标记,并使用 DataMemberAttribute 属性标记您想要序列化的所有成员。如果类型是集合,请考虑使用 CollectionDataContractAttribute 对其进行标记。有关其他支持的类型,请参阅 Microsoft .NET Framework 文档。

    【讨论】:

    • 所以,如果我想在这种情况下使用继承,我唯一的选择是用DataContractAttribute 标记BaseClass,对吧?
    • 我怀疑,我怀疑 WCF 不能序列化(因为它不能反序列化)抽象类。
    • @B.M 确实;只要在运行时解析具体类型,@BenCr 抽象类型通常就可以了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    相关资源
    最近更新 更多