WCF問題,我有一個實現以下數據成員服務:與KnownType的字典
[DataMember]
public Dictionary<string, List<IOptionQueryResult>> QueryResultItems { get; set; }
我有類「OptionQuerySingleResult」從IOptionQueryResult繼承。現在,我明白,我需要讓OptionQueryResult型「已知」的服務,從而試圖添加KnownType以不同的方式:
[KnownType(typeof(Dictionary<string, OptionQuerySingleResult[]>))]
[KnownType(typeof(Dictionary<string, List<OptionQuerySingleResult>>))]
[KnownType(typeof(OptionQuerySingleResult)]
然而,沒有這些方法的工作,並在客戶端上我無論是獲取反序列化失敗還是服務器簡單地中止請求,導致連接中止錯誤。
有沒有人有什麼正確的方法來得到這個工作的想法? 我想補充說,如果我改變QueryResultItems定義使用具體類型,而不是界面,一切正常。
感謝,
湯姆
編輯: ,我得到的例外是:在線路
錯誤1位524元「http://schemas.microsoft.com/2003/10/Serialization/Arrays:anyType」包含映射到一個數據類型名稱':OptionQuerySingleResult'。反序列化器不知道映射到該名稱的任何類型。考慮使用DataContractResolver或將與'OptionQuerySingleResult'對應的類型添加到已知類型列表中 - 例如,通過使用KnownTypeAttribute屬性或將其添加到傳遞給DataContractSerializer的已知類型列表。
然而,當我看着SvcUtil工具生成客戶端代理,「OptionQuerySingleResult」肯定是在它定義爲:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]
[System.Runtime.Serialization.DataContractAttribute(Name="OptionQuerySingleResult", Namespace="")]
[System.SerializableAttribute()]
public partial class OptionQuerySingleResult : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
不幸的是,這似乎也不起作用。奇怪的是,如果我添加[KnownType(typeof(OptionQuerySingleResult)]並返回一個IOptionQueryResult列表,而不是字典,它工作得很好。 – TJF 2010-06-10 13:36:46