メンバーの 1 つとして List (Of Common.myBaseClass) を含む複合型 (myComplexResult) を返す WCF サービスのメソッドがあります。このリストには、さまざまなタイプの Foo.myClass1 と Bar.myClass2 のアイテムを保持する必要があります。どちらも Common.myBaseClass から継承されます。これらのクラスはすべて、異なるアセンブリで定義されていることに注意してください。
サービスは次の例外をスローします。
データ コントラクト名が 'myClass1: http://mynamespace/foo/ ' のタイプ 'Foo.myClass1' は想定されていません。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加することにより、静的に認識されていない型を既知の型のリストに追加します。
さて、DataContractSerializer がそれらの処理方法を認識できるように、myClass1 と myClass2 を myBaseClass の既知の型として宣言する必要があることに気付きました。myClass1 と myClass2 の KnownType 属性を使用して myBaseClass クラスを装飾することはできません。これは、Foo アセンブリと Bar アセンブリへの参照を追加することになり、循環依存が発生するためです。
構成ファイルで definedTypes を使用したいと思っていましたが、これを試しました:
<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>
それは役に立たないようだったので、myComplexResult に KnownType 属性を追加しようとしました。
<DataContract(name:="myComplexResult", [namespace]:="http://mynamespace/coo/")> _
<KnownType(GetType(Foo.myClass1))> _
Public Class myComplexResult
<DataMember(name:="myList")> _
Public myList As List(Of Common.myBaseClass)
しかし、私はまだ同じエラーが発生しています。ヘルプ!私は何をしますか?