是否可以传递通用对象(通用我指的是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手动将类序列化为字符串或byte []并在服务器端对它们进行反序列化:void Save(byte [] serializedObject)但这有点像黑客。
我注意到我可以轻松返回通用对象,例如 对象加载(字符串ID) 工作正常,但无法保存(对象o)没有。
我正在使用Silverlight作为客户端。
答案 0 :(得分:1)
是的,你可以为WCF项目使用通用的Message
类型,它可以是任何东西。但是,这给你带来了很多工作,无论是在客户端创建消息对象(你基本上都必须手动创建组成通用消息的XML),以及服务器端,因为你不能依赖好的XML序列化/反序列化了。你正在处理基本的原始角括号汤(直接XML)。
它有效,它可能是一个解决方案 - 但也许有其他更优雅和有用的解决方案?这个遗产真的需要吗?想想你的系统设计。
马克