Чтобы попытаться понять, где это не получается, я настроил простую службу WCF, которая возвращает базовую вложенную Dictionary
, которая прекрасно работает с несколькими добавленными в нее элементами.
[OperationContract]
Dictionary<int, Dictionary<int, int>> GetDictionary();
Исходя из этого, я предполагаю, что это проблема с вашими объектами (& возможно тот факт, что они находятся в Dictionary
коллекциях).Я предлагаю вам сделать несколько тестов, чтобы сузить вашу проблему.
Сериализуем ли ваш класс - можете ли вы десериализовать один экземпляр вашего типа?(например, написать операцию для возврата объекта типа MyClass GetOneInstance();
).Можете ли вы вернуть простой Dictionary
вашего класса?
Существует несколько столкновений имен, которые WCF может вызвать у вас - если ваши классы имеют то же имя, что и ваша служба или ваша операция, дляНапример, операция GetSomething
и объект с именем GetSomethingRequest
или GetSomethingResponse
не будут хорошо работать вместе - в основном из-за того, что запрос и ответ помещаются в автоматически именуемые конверты SOAP.Если ваши классы названы с использованием некоторых зарезервированных слов, вы можете попробовать переименовать их.
Исключение предполагает добавление атрибута KnownType
.Это обычно применимо, когда вы возвращаете базовый тип, который может быть экземпляром наследуемого типа - так ли это?Включают ли ваши объекты наследование, и возвращаете ли вы базовые типы, которые могут быть экземплярами наследуемых типов?(Например, A:B
и ваша операция возвращает B
, но это может быть A
)