据我了解,由于Dictionary(Of String, String)
实现了Dictionary
,因此无法将IDictionary
传递给ASMX Web服务。尝试这样做不仅导致该方法在尝试调用时抛出异常,而且在尝试在浏览器中转到Web服务URL时抛出异常:
类型System.Collections.Generic.Dictionary`2 [[System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,Version = 4.0.0.0, Culture = neutral,PublicKeyToken = b77a5c561934e089]]不受支持,因为它实现了IDictionary。
但是,我发现如果我创建一个包含Dictionary属性的类,并将其作为参数传递给Web服务方法,它可以正常工作。
Public Class DictWrapper
Public Property oDic as Dictionary(Of String, String)
End Class
<WebMethod()>
Public function ReadDic(oDictWrapper as DictWrapper) As Boolean
Return oDictWrapper("SomeBoolean")
End Function
为什么这个例子有效?我可以用AJAX调用这个WebMethod,在包装的字典中传递不同数量的键和值,没问题。这与将字典作为WebMethod的参数有什么不同?