我有以下结构:
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”的数据协定名称为“ [某些URI文本]”不是
预期。考虑使用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,我是唯一认为输入字段在此站点上很时髦的人吗?当我尝试格式化...时,事情一直在移动……:|伟大的网站,无论我是否有能力按需输入文本。
最佳答案
您必须将ServiceKnownTypeAttribute设置到服务接口:
[ServiceKnownType(typeof(DerivedClass))]
public interface IService
{
// Service declaration
}