【发布时间】:2009-05-14 00:20:07
【问题描述】:
是否可以在不从一个根继承的情况下传递泛型对象(泛型是指DataContract 的任何对象,而不是 C# 泛型集合)?目前我有这样的事情:
[OperationContract]
void Save(GenericObject o);
[DataContract]
[KnownType(typeof(ClassA))]
[KnownType(typeof(ClassB))]
class GenericObject {....
[DataContract]
class ClassA: GenericObject {....
[DataContract]
class ClassB: GenericObject {....
一切都很好,但是项目变得更大了,我真的负担不起从一个类派生所有这些合同。
我不想为服务添加专门的方法。 作为一种解决方法,我可以通过 DataContractSerializer 手动将类序列化为 string 或 byte[] 并在服务器端对它们进行反序列化:void Save(byte[] serializedObject) 但这有点麻烦。
我注意到我可以轻松返回通用对象,例如 对象加载(字符串 id) 工作得很好,但 void Save(object o) 没有。
我使用 Silverlight 作为客户端。
【问题讨论】:
-
您在下方有回复。如果您想了解更多信息,如果我们能够深入了解 ClassA、ClassB 以及您的 GenericObject 的外观,这可能会有所帮助。以及为什么要传递通用对象而不是 ClassA/B/C 等。
-
我想传递一个通用对象,因为我有大量对象(ClassA/B/C),它们存储在数据库之上创建的虚拟文件系统中。因此,我使用两种方法来存储/检索它们:Save()/Load() 而不是具有完全相同签名(除了类型)的 SaveClassA/SaveClassB/SaveClassC。
标签: c# wcf silverlight web-services serialization