1

问题:我有一个 WCF 服务,它通过反射调用方法并发送结果。像这样:

[OperationContract] Object InvokeMemberByReflection(string typeName, string name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args);

我这样做是因为我有一个想要调用的现有 API X。我不想为所有方法编写包装器。

我也不使用显式 DataContracts,因为服务器和客户端都引用同一组 dll。

但是,对于上面的 InvokeMemberByReflection 方法,由于我将方法参数作为类型对象的数组发送,看起来我必须将 API X 的所有可能的方法签名添加为 KnownTypeAttributes 才能使 DataContractSerializer 工作。

有解决办法吗?CLR 基本上知道对象数组中包含的元素的类型。它不能基于此进行序列化/反序列化(假设它是不同的类型)?

我也很欣赏解决此类问题的任何其他模式。由于显而易见的原因,反射太慢了。

4

1 回答 1

2

如果客户端和服务器使用相同的 DLL(即类型完全相同),那么您可以使用NetDataContractSerializer不需要已知类型属性的 (它在序列化时发出 CLR 类型信息)。这篇文章有一个关于如何使用该序列化程序的示例。

于 2012-05-24T02:07:16.650 回答