【发布时间】:2011-03-30 15:27:43
【问题描述】:
我有各种类,我想在 WCF 中公开为复杂类型,因此我根据需要在这些类型和属性上添加 [DataContract] 和 [DataMember] 属性。
但是,如果我想让它们从抽象基类继承(例如,Person 从抽象 EntityBase 继承),我会收到一个错误,即类型“无法从未使用 DataContractAttribute 或 SerializableAttribute 标记的类型继承”。
问题是,如果我将 [DataContract] 属性添加到基类,那么该基类会通过 WSDL 暴露给客户端。我想这没什么大不了的,但我希望我的客户不知道我的内部实现。
如果我将 [Serializable] 属性添加到基类,那么它一开始似乎可以工作(它可以被序列化,但 WSDL 中没有引用 EntityBase),但现在如果我向 EntityBase 添加任何属性,那么它会还抱怨它的属性不可序列化。 (例如,我添加了一个 ICollection,然后我收到 RuleViolation 不可序列化的错误)。
不幸的是,[Serializable] 类型似乎与 [IgnoreDataMember] 没有类似之处([NonSerialized 仅适用于字段,不适用于属性)。
所以基本上我想声明这个基类型,但不需要序列化它的任何成员;有什么方法可以在 WCF 中进行设置,这样客户端就看不到这个基类型了吗?
【问题讨论】:
标签: c# wcf serialization