[英]Inherit from abstract class in WCF without exposing that class
我想將各種類公開為WCF中的“復雜類型”,因此我根據需要在這些類型和屬性上添加了[DataContract]和[DataMember]屬性。
但是,如果我想讓它們從抽象基類繼承(例如,Person從抽象EntityBase繼承),則會收到錯誤消息,指出類型“無法從未標記有DataContractAttribute或SerializableAttribute的類型繼承”。
問題是,如果我將[DataContract]屬性添加到基類,則該基類將通過WSDL向客戶端公開。 我猜這沒什么大不了的,但是我希望我的客戶不了解我的內部實現。
如果我將[Serializable]屬性添加到基類,那么它似乎一開始就可以工作(可以序列化,但是WSDL中未引用EntityBase),但是現在,如果我將任何屬性添加到EntityBase,那么它也會抱怨其屬性不可序列化。 (例如,我添加了一個ICollection,然后我收到一個RuleViolation無法序列化的錯誤)。
不幸的是,[Serializable]類型似乎沒有類似於[IgnoreDataMember]的類型([NonSerialized僅適用於字段,不適用於屬性)。
因此,基本上我想聲明此基本類型,但不需要任何其成員進行序列化; 有什么方法可以在WCF中進行設置,以便客戶端看不到該基本類型?
您是否嘗試過根本不使用[DataContract]
和[DataMember]
標記您的實體(以便使用默認序列化),而是使用[IgnoreDataMember]
標記基類屬性?
您總是有幾種選擇,恐怕您不會喜歡其中任何一種。
最好的問候,拉迪斯拉夫
我認為您必須使用KnownType屬性。 例如,請參見帶有KnownType for Dictionary的WCF問題
[編輯]可以在這里找到關於此問題及其解決方案的更完整討論: WCF:接口,泛型和ServiceKnownType
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.