如何将哈希表发送到asmx webservice?

时间:2009-05-14 08:52:23

标签: .net javascript web-services json

我正在尝试使用JSON将哈希表发送到我的webservice。但是,您无法发送字典类型的对象(出于某种原因)。

显然有效的解决方案是“List(Of KeyValuePair(Of String,String))”,无论如何输出:

<WebMethod()> _
Public Function test() As List(Of KeyValuePair(Of String, String))
    Dim ret As New List(Of KeyValuePair(Of String, String))
    ret.Add(New KeyValuePair(Of String, String)("foo", "5"))
    ret.Add(New KeyValuePair(Of String, String)("bar", "baz"))
    Return ret
End Function

输出(以json为单位):[{“Key”:“foo”,“Value”:“5”},{“Key”:“bar”,“Value”:“baz”}]

当我想在javascript中重新提交时,我必须使用此功能:

<WebMethod()> _
Public Sub test2(ByVal obj As List(Of KeyValuePair(Of String, String)))
    Dim dummy As UInt16 = obj.Count
End Sub

我将其称为JSON参数字符串:

'{"obj": [{"Key":"foo","Value":"5"},{"Key":"bar","Value":"baz"}]}'

这会返回错误。本身不是错误,但'obj'的内容是一个包含2个项目的列表,但是当我在调试器中查看它们时,两者都是Nothing(或者对于C#people来说为null)。

如何将配对数据从javascript发送到我的网络服务?

4 个答案:

答案 0 :(得分:1)

如果更改test2以接收Dictionary对象列表,我认为你会很高兴。

<WebMethod()> _
Public Sub test2(ByVal obj As List(Of Dictionary(Of String, String)))
    Dim dummy As UInt16 = obj.Count
End Sub

答案 1 :(得分:0)

试试这个......

'{"obj": {"foo":"5","bar":"baz"}}'

答案 2 :(得分:0)

[部分答案]:我遇到了类似的问题,最后使用这个JSON库(http://www.json.org/js.html)和JSON.stringify(yourJSONObj)将对象发送回我的服务。

我的问题与JSON没有正确识别我的对象有关,它假设我的一些属性名称是JSON原语。通过使用此调用(JSON.stringify()),它修复了该问题。

您可以执行以下操作:

var data = JSON.stringify('{"obj": [{"Key":"foo","Value":"5"},{"Key":"bar","Value":"baz"}]}'
); 

然后将数据对象发送到您的ASMX服务。

答案 3 :(得分:0)

如果您从.Net调用Web服务并需要以JSON格式传递数据,请考虑使用JayRock(http://jayrock.berlios.de/)将事物转换为JSON。只需引用DLL,导入名称空间,创建一个JsonObject,用东西填充它并将其导出为字符串。这是一个例子


Imports Jayrock.Json
Imports Jayrock.Json.Conversion

Public Function foo(hsh As HashTable) As String

  Dim jObj As New JsonObject()

  jObj.Put("_myHashTable", hsh)

  Return JsonConvert.ExportToString(jObj)

End Sub


如果您需要通过AJAX将数据从DOM传送到Web服务,我将使用json.org中的Javascript库,如上所述。您也可以使用JayRock轻松地将JSON字符串转换为JsonObject。