我有以下结构:

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
}

10-06 13:38