Можно ли передавать универсальные объекты (под универсальными, я имею в виду любые с DataContract
, а не C # универсальной коллекцией) без наследования от одного корня? На данный момент у меня есть что-то вроде этого:
[OperationContract]
void Save(GenericObject o);
[DataContract]
[KnownType(typeof(ClassA))]
[KnownType(typeof(ClassB))]
class GenericObject {....
[DataContract]
class ClassA: GenericObject {....
[DataContract]
class ClassB: GenericObject {....
Все было хорошо, но проект стал больше, и я не могу позволить себе выводить все эти контракты из одного класса.
Я не хочу добавлять специализированные методы в сервис.
В качестве обходного пути я могу вручную сериализовать классы в строку или byte [] через DataContractSerializer и десериализовать их на стороне сервера: void Save (byte [] serializedObject), но это немного хак.
Я заметил, что могу легко возвращать общие объекты, например,
Загрузка объекта (идентификатор строки)
работает просто отлично, но void Save (объект o) - нет.
Я использую Silverlight в качестве клиента.