2

メンバーの 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)

しかし、私はまだ同じエラーが発生しています。ヘルプ!私は何をしますか?

4

1 に答える 1

3

私のせいです。再試行しましたが、上に投稿した両方のソリューションが実際に機能します。これは、テストを実行する前にテスト プロジェクトのサービス リファレンスを更新していないだけだと思います。

于 2009-06-12T12:43:46.593 に答える