如何通过WCF传递通用对象

时间:2009-05-14 00:20:08

标签: c# wcf silverlight web-services serialization

是否可以传递通用对象(通用我指的是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作为客户端。

1 个答案:

答案 0 :(得分:1)

是的,你可以为WCF项目使用通用的Message类型,它可以是任何东西。但是,这给你带来了很多工作,无论是在客户端创建消息对象(你基本上都必须手动创建组成通用消息的XML),以及服务器端,因为你不能依赖好的XML序列化/反序列化了。你正在处理基本的原始角括号汤(直接XML)。

它有效,它可能是一个解决方案 - 但也许有其他更优雅和有用的解决方案?这个遗产真的需要吗?想想你的系统设计。

马克