1

如果这是一个幼稚的问题,我们深表歉意。我编写了一个“通用”C# Web 服务客户端:它通过检查任何 Web 服务的 WSDL 并生成允许您向 Web 服务提交请求并显示响应的 Windows 窗体 UI 来工作。

它生成 UI 的过程如下:首先,它从 Web 服务的 WSDL 动态生成一个已编译的程序集(使用 ServiceDescriptionImporter 和 CodeCompiler),然后它内省由该过程生成的 SoapHttpClientProtocol 客户端。

对于每个 Web 服务方法,通过反映参数类型生成显示输入参数字段的 UI。本质上,我必须识别每种类型并决定如何最好地显示它(因此字符串参数显示为文本框,布尔值显示为复选框,等等)。

我难以识别的类型是 ArrayOfKeyValuestringstringKeyValueOfstringstring 等类型。我可以简单地解析类型的名称(沿着 if(名称以“ArrayOf”开头)的行),但我确信必须有更好的方法来以某种方式将这些类型识别为数组。

如果有人可以建议如何做到这一点,我将不胜感激!谢谢,马丁

4

2 回答 2

1

如果它是任何类型的数组或列表,它将实现 IEnumerable,因此这可能会让您朝着正确的方向前进:

if (typeof(IEnumerable).IsAssignableFrom(typeof(ArrayOfKeyValuestringstringKeyValueOfstringstring)))
{
    // ok, it's an array...
}

编辑:Martin (user304582) 指出一些其他类型,如 String 实现 IEnumerable。我在这里的假设是,在代码的这一点上,简单类型(如 String、Int32 等)已经过测试——它不是其中之一。

假设 ServiceDescriptionImporter 在所有情况下使用数组而不是列表生成参数,也可以使用Array而不是。IEnumerable

于 2012-07-20T23:49:33.320 回答
0

不幸的是,这也不起作用,因为我需要以编程方式提取键和值的类型。出于其他技术原因,我已升级我的客户端以使用 .Net 4.0 WsdlImporter 及其相关类,这些类生成更清晰的类型代码,并且作为副产品避免使用这些 ArrayOf 类。谢谢你的帮助!

于 2012-07-24T03:00:22.597 回答