C# WCF发送对象[],但不添加KnownTypeAttribute

C# WCF发送对象[],但不添加KnownTypeAttribute,c#,.net,wcf,reflection,wcf-client,C#,.net,Wcf,Reflection,Wcf Client,问题:我有一个WCF服务,它通过反射调用方法并发送结果。像这样: [运营合同] 对象InvokeMemberByReflection(字符串类型名称、字符串名称、BindingFlags invokeAttr、绑定器绑定器、对象目标、对象[]参数) 我这样做是因为我有一个要调用的现有API X。我不想为所有方法编写包装 我也不使用显式数据契约,因为服务器和客户端都引用同一组DLL 但是,对于上面的InvokeMemberByReflection方法,由于我将方法参数作为类型对象的数组发送,因此看

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

[运营合同]
对象InvokeMemberByReflection(字符串类型名称、字符串名称、BindingFlags invokeAttr、绑定器绑定器、对象目标、对象[]参数)

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

我也不使用显式数据契约,因为服务器和客户端都引用同一组DLL

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

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


此外,我也希望有任何其他模式来解决这一问题。反射速度太慢,原因显而易见。

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

您访问的是哪种API,在没有任何抽象的情况下将其所有方法封装在(大量)web服务调用中可能是有意义的?这是一个测试API,因此性能在这里不是问题。那么您为什么要使用web服务呢?这是一个分布式环境。我正在测试一个在集群中运行的云服务。测试应该在我的盒子里进行