我有這些類:WCF - probem與序列化繼承類型
[DataContract]
public class ErrorBase {}
[DataContract]
public class FileMissingError: ErrorBase {}
[DataContract]
public class ResponseFileInquiry
{
[DataMember]
public List<ErrorBase> errors {get;set;};
}
類ResponseFileInquiry的一個實例是我的服務方法返回給客戶端。現在,如果我填ResponseFileInquiry.errors與ErrorBase的情況下,一切工作正常,但如果我添加繼承類型FileMissingError的實例,我序列化過程中得到一個服務端異常:
Type 'MyNamespace.FileMissingError' with data contract name 'FileMissingError'
is not expected. Add any types not known statically to the list of known types -
for example, by using the KnownTypeAttribute attribute or by adding them to the
list of known types passed to DataContractSerializer.'
所以串行器感到困惑,因爲它期望List包含聲明的類型對象(ErrorBase),但它獲得繼承類型(FileMissingError)對象。
我有一大堆的錯誤類型,列表將包含它們的組合,所以我能做些什麼來使它工作?
謝謝,博客條目有所有可能的方式來聲明已知類型。 – Andrey 2010-02-24 21:17:19
在我的情況下,使用KnownType沒有多大幫助,因爲類型來自我沒有引用的單獨程序集。其他開發者正在擴展我爲DataContract添加的一些屬性。如果我只是想拋棄任何派生類並使用基類,該怎麼辦? – brendonparker 2017-02-10 16:31:58
這是我必須使用的解決方案:http:// stackoverflow。com/a/8414390/2460073 注意:我必須將客戶DataContractSerializer應用到ClientBase – brendonparker 2017-02-10 18:50:17