У меня есть метод в службе WCF, который возвращает сложный тип (myComplexResult), который включает в качестве одного из своих членов список (Of Common.myBaseClass). Я хочу, чтобы этот список содержал элементы, которые по-разному могут иметь тип Foo.myClass1 и Bar.myClass2, оба из которых наследуются от Common.myBaseClass. Обратите внимание, что все эти классы определены в разных сборках.
Служба выдает это исключение:
Тип
'Foo.myClass1'
с названием контракта данных
«MyClass1: http://mynamespace/foo/'
не ожидается Добавить любые типы не
статически известен к списку известных
типы - например, с помощью
Атрибут KnownTypeAttribute или
добавив их в список известных типов
передано в DataContractSerializer.
Хорошо, я понимаю, что мне нужно объявить myClass1 и myClass2 как известные типы myBaseClass, чтобы DataContractSerializer знал, что с ними делать. Я не могу сделать очевидную вещь и украсить класс myBaseClass с помощью атрибутов KnownType для myClass1 и myClass2, поскольку это будет означать добавление ссылок на сборки Foo и Bar, что вызывает циклическую зависимость.
Я надеялся использовать объявленные типы в моем конфигурационном файле, и я попробовал это:
<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)
Но я все еще получаю ту же ошибку. Помогите! Что мне делать?