我有我想在WCF暴露为复杂类型的各种类,所以我添加[DataContract]和[数据成员]属性作为必要对这些类型和属性。但是,如果我想让它们从抽象基类继承(例如,Person从抽象EntityBase继承),则会出现类型“不能从未使用DataContractAttribute或SerializableAttribute标记的类型继承”的错误。继承在WCF抽象类不暴露该类
的问题是,如果我添加[DataContract]属性基类,则该基类是通过WSDL暴露给客户端。我猜想没有什么大不了的,但我更希望我的客户不知道我的内部实现。
如果我将[Serializable]属性添加到基类,它似乎首先工作(它可以序列化但EntityBase没有在WSDL中引用),但现在如果我添加任何属性到EntityBase那么它也会抱怨它的属性不可序列化。 (例如我添加一个ICollection,然后出现一个RuleViolation不可序列化的错误)。
不幸的似乎没有模拟到[IgnoreDataMember]一种[序列化]类型([非序列化仅适用于字段,而不是属性)。
所以基本上我想声明这个基础类型,但不需要任何成员被序列化;有什么办法可以在WCF中进行设置,因此客户端看不到这种基本类型?
感谢Ladislav的建议。我应该提到我已经在使用EF4/POCO,EntityBase是我自己的,而不是EF的一部分。我没有尝试使用“默认”序列化,但我对它的“退出”类型模型并不满意。你对使用DTO的可能性是正确的,但在这一点上,“问题”还不够坏,不值得麻烦。 – 2010-08-17 12:28:42