【发布时间】:2012-07-20 05:48:20
【问题描述】:
如果这是一个幼稚的问题,我们深表歉意。我编写了一个“通用”C# Web 服务客户端:它通过检查任何 Web 服务的 WSDL 并生成一个允许您向 Web 服务提交请求并显示响应的 Windows 窗体 UI 来工作。
它生成 UI 的过程如下:首先,它从 Web 服务的 WSDL 中动态生成一个已编译的程序集(使用 ServiceDescriptionImporter 和 CodeCompiler),然后它内省此过程生成的 SoapHttpClientProtocol 客户端。
对于每个 Web 服务方法,显示输入参数字段的 UI 是通过反映参数类型生成的。本质上,我必须识别每种类型并决定如何最好地显示它(因此字符串参数显示为文本框,布尔值显示为复选框,等等)。
我难以识别的类型是 ArrayOfKeyValuestringStringKeyValueOfstringstring 等类型。我可以简单地解析类型的名称(沿着 if(名称以“ArrayOf”开头)),但我确信必须有更好的方法来以某种方式将这些类型识别为数组。
如果有人可以建议如何执行此操作,我将不胜感激!谢谢,马丁
【问题讨论】:
-
能否提供一些示例内容。说明问题的 SOAP XML 或部分代码。我发现一些 SOAP 文档似乎表明 XML 明确标识了我不知道是否有帮助的数组:w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383522
-
该类型是否按字面意思称为
"ArrayOfKeyValuestringstringKeyValueOfstringstring"?或者它实际上是一个数组?那么换句话说,你想知道一个对象是否真的是一个数组吗? -
嗨 - 是的,这个类型就是字面意思。在 Web 服务端,该类型被声明为 Dictionary
,但如果我的工具调用 Web 服务,则返回的对象被标识为 ArrayOfKeyValuestringstringKeyValueOfstringstring 类型。如果我测试 type.IsArray,那么这是错误的,但出于我的目的,我想将其视为类似于数组,因此我需要将其标识为“类似数组”。 -
在服务器端,Web 服务声明如下: Dictionary
GetDictionary();如果我查看相应生成的客户端代码,我可以看到: public ArrayOfKeyValueOfstringstringKeyValueOfstringstring[] GetDictionary()
标签: c# arrays reflection types