我有以下结构: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 <>的列表元素。 –
当您无法控制服务代码时,这是一个值得关注的问题。 –