我有以下結構:WCF調用失敗
public class DerivedClass : List<BaseClass>
{
//Some helper methods used against the List of BaseClass properties
//Methods
public List<BaseClass> GetListOfBaseClasses()
{
return (List<BaseClass>)this;
}
}
我的WCF服務所知道的BaseClass的對象,但客戶端導出它作爲一個通用的清單,現在當我嘗試調用服務,像這樣:
DerivedClass classD;
FillData(classD)
List<BaseClass> baseClassList = classD.GetListOfBaseClasses();
using (IService myService = ObjectFactory.GetMyService())
{
myService.DoSomething(baseClassList); //Method is expecting "List<BaseClass>"
}
我得到以下異常:
類型 'DerivedClass' 與數據c ontract name'[some URI text]'不是 預計。考慮使用DataContractResolver或將靜態已知的任何類型 添加到已知類型的列表中 - 例如,使用KnownTypeAttribute屬性的 或將它們添加到傳遞給DataContractSerializer的已知類型的列表 。
我試圖將這些屬性添加到我的班在各種組合,但仍沒有運氣:
[Serializable]
[KnownType(typeof(List<BaseClass>))]
[XmlInclude(typeof(List<BaseClass>))]
[KnownType(typeof(BaseClass))]
[XmlInclude(typeof(BaseClass))]
public class DerivedClass : List<BaseClass>
{
/// ...
}
PS- Sheehs,我是說認爲輸入字段都在這個網站時髦的唯一一個?當我試圖格式化時,事情會不斷移動...:|無論我是否想要按照自己的意願輸入文字,這都是一個偉大的網站。
不確定這是否是最好的方法,因爲這會將客戶端代碼緊密地耦合到服務接口。該服務只知道List,並不認爲它應該關心客戶端如何發送它。假設另一個客戶端想要派生DerivedClass,那麼服務器需要添加另一個屬性。不要認爲這對軟件維護非常有用。所有派生類的功能都與列表的包裝類似,因此它可以操縱使用操作符/方法中構建的泛型List <>的列表元素。 –
當您無法控制服務代碼時,這是一個值得關注的問題。 –