我在WCF服务的方法,它返回一个复杂类型(myComplexResult),其中包括作为其成员列表(中Common.myBaseClass)中的一个。我想这个名单持有项目可以被不同地类Foo.myClass1和Bar.myClass2的,这两者从Common.myBaseClass继承。请注意,所有这些种类的不同组件被定义。

在服务引发此异常:

  

类型   'Foo.myClass1'   数据合同名称   'MyClass1的: HTTP:// myNameSpace对象/富/ '   预计不会。添加任何类型的不   静态已知的已知名单   类型 - 例如,通过使用   KnownTypeAttribute属性或通过   将它们添加到已知类型的列表   传递给DataContractSerializer的。

好了,所以我知道我需要声明MyClass1的和myClass2为已知类型myBaseClass,使DataContractSerializer的知道与他们做。我不能做明显的事情和装饰用KnownType的myBaseClass类属性MyClass1的和myClass2,因为这将意味着增加了Foo和Bar组件,这将导致循环依赖引用。

我希望在我的配置文件中使用declaredTypes,我试过这样:

<system.runtime.serialization >
    <dataContractSerializer >
        <declaredTypes >
            <add type ="Common.myBaseClass, Common">
                <knownType type ="Foo.myClass1, Foo" />
                <knownType type ="Bar.myClass2, Bar" />
            </add>
        </declaredTypes>
    </dataContractSerializer>
</system.runtime.serialization>

这似乎并没有帮助,所以我打算给KnownType属性添加到myComplexResult:

  <DataContract(name:="myComplexResult", [namespace]:="http://mynamespace/coo/")> _
    <KnownType(GetType(Foo.myClass1))> _
    Public Class myComplexResult
        <DataMember(name:="myList")> _
        Public myList As List(Of Common.myBaseClass)

但我仍然得到同样的错误。救命!我该怎么办?

有帮助吗?

解决方案

我的故障。我再次试图与这两个我上面贴的实际解决方案,做的工作。我认为这是简单地运行测试之前没有更新我的测试项目中的服务引用的情况下 - 哎呦!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top