无法通过GET ajax web请求返回Dictionary(Of String,String),与POST一起使用

我有以下Web方法:

 _  _ Public Function GetDictionary() As Dictionary(Of String, String) Dim d As New Dictionary(Of String, String) d.Add("key1", "value1") d.Add("key2", "value2") Return d End Function 

如果我从我的ajax调用中使用HttpPost,我可以很好地检索结果(JSON),但是一旦我使用HttpGet,我就会得到以下exception:

System.NotSupportedException:类型System.Collections.Generic.Dictionary`2 [[System.String,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,Version = 2.0.0.0 ,Culture = neutral,PublicKeyToken = b77a5c561934e089]]不受支持,因为它实现了IDictionary

我想在这里使用HttpGet,以便可以缓存结果。

我尝试了各种变化,但没有运气。 有任何想法吗? 这可能与GET有关吗?

我有点困惑 – 如果ResponseFormat是JSON(如上例所示),那么应该支持 IDictionary派生词,但是如果它是XML,那么我可以理解看到这个错误,因为XmlSerializer不支持这个。

使用XmlSerializer发送字典类型的一个选项是实现逻辑以将其转换为数组或List或ArrayList。 或者,您可以为数据实现自定义序列化程序并编写自己的XML,从而从您的方法返回XmlDocument。 这将允许您以您选择的任何方式格式化数据。

也许您可以澄清您是使用JSON还是XML?

另一种方法是将Return类型更改为String,然后通过JavaScriptSerializer.Serialize将Dictionary转换为JSON。 这可能不是您想要返回的字典,但它将是JSON Response中的key = value对。

  _  _ Public Function GetDictionary() As String Dim d As New Dictionary(Of String, String) d.Add("key1", "value1") d.Add("key2", "value2") Return New JavaScriptSerializer().Serialize(d) End Function 

结果JSON:

 {"key1":"value1","key2":"value2"}