如何将C#类识别为ArrayOf的实例

如何将C#类识别为ArrayOf的实例,c#,arrays,reflection,types,C#,Arrays,Reflection,Types,如果这是一个天真的问题,我道歉。我已经编写了一个“通用”C#Web服务客户端:它通过检查任何Web服务的WSDL并生成一个Windows窗体UI来工作,该UI允许您向Web服务提交请求并显示响应 它按如下方式生成UI:首先,它从Web服务的WSDL动态生成一个已编译的程序集(使用ServiceDescriptionImporter和CodeCompiler),然后在这个过程生成的SoapHttpClientProtocol客户机上进行内省 对于每个Web服务方法,通过反映参数类型来生成显示输入参

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

它按如下方式生成UI:首先,它从Web服务的WSDL动态生成一个已编译的程序集(使用ServiceDescriptionImporter和CodeCompiler),然后在这个过程生成的SoapHttpClientProtocol客户机上进行内省

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

我难以识别的类型是ArrayOfKeyValueStringKeyValueOfStringString等类型。我可以简单地解析类型的名称(类似于if(名称以“ArrayOf”开头),但我确信一定有更好的方法以某种方式将这些类型识别为数组


如果有人能提出建议,我将不胜感激!谢谢,Martin

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

if (typeof(IEnumerable).IsAssignableFrom(typeof(ArrayOfKeyValuestringstringKeyValueOfstringstring)))
{
    // ok, it's an array...
}
编辑:Martin(user304582)指出,其他一些类型(如String)实现IEnumerable。我在这里的假设是,在代码的这一点上,简单类型(如String、Int32等)已经过测试,但它不是其中之一


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

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

if (typeof(IEnumerable).IsAssignableFrom(typeof(ArrayOfKeyValuestringstringKeyValueOfstringstring)))
{
    // ok, it's an array...
}
编辑:Martin(user304582)指出,其他一些类型(如String)实现IEnumerable。我在这里的假设是,在代码的这一点上,简单类型(如String、Int32等)已经过测试,但它不是其中之一


如果ServiceDescriptionImporter在所有情况下都使用数组而不是列表来生成参数,那么也可以使用
Array
而不是
IEnumerable

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

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

你能提供一些样本内容吗。SOAP XML或说明问题的部分代码。我发现一些SOAP文档似乎表明XML显式标识了数组,但我不知道这是否有帮助:该类型的字面意思是
“ArrayOfKeyValueStringKeyValueOfStringString”
?或者它实际上是一个数组?换句话说,你想知道一个对象是否真的是一个数组吗?嗨,是的,这个类型的字面意思就是数组。在Web服务端,该类型被声明为字典,但如果我的工具调用Web服务,则返回的对象被标识为ArrayOfKeyValueStringKeyValueOfStringString类型。如果我测试type.IsArray,那么这是false,但出于我的目的,我想将其视为类似于数组,因此我需要将其标识为“类似于数组”;如果我查看相应生成的客户端代码,我会看到:public ArrayOfKeyValueOfstringstringKeyValueOfstringstring[]GetDictionary(),您可以提供一些示例内容吗。SOAP XML或说明问题的部分代码。我发现一些SOAP文档似乎表明XML显式标识了数组,但我不知道这是否有帮助:该类型的字面意思是
“ArrayOfKeyValueStringKeyValueOfStringString”
?或者它实际上是一个数组?换句话说,你想知道一个对象是否真的是一个数组吗?嗨,是的,这个类型的字面意思就是数组。在Web服务端,该类型被声明为字典,但如果我的工具调用Web服务,则返回的对象被标识为ArrayOfKeyValueStringKeyValueOfStringString类型。如果我测试type.IsArray,那么这是false,但出于我的目的,我想将其视为类似于数组,因此我需要将其标识为“类似于数组”;如果查看相应生成的客户端代码,我可以看到:public ArrayOfKeyValueOfstringstringKeyValueOfstringstring[]GetDictionary()