我有我想在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