【问题标题】:How to send a hashtable to an asmx webservice?如何将哈希表发送到 asmx 网络服务?
【发布时间】:2009-05-14 08:52:23
【问题描述】:

我正在尝试使用 JSON 将哈希表发送到我的网络服务。但是,您不能发送字典类型的对象(出于某种原因)。

一个明显有效的解决方案是“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# 人来说是 null)。

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

【问题讨论】:

    标签: .net javascript web-services json


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      试试这个...

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

      【讨论】:

      • 不能与 List(of KeyValuePair()) 结合使用。我需要其他对象类型吗?
      • IIRC Dictionary 在 MVC 中匹配得相当好,对服务调用不那么熟悉,或者事情是如何传入的......不引用字符串工作吗?抱歉在这里有点含糊,只是对 JS 比对通信部分更熟悉,或者在通信通道中如何编码。
      • 我遇到了相反的问题——从 MVC 返回一个 JSON 格式的哈希表——它就像返回 Dictionary 一样简单。实际上非常棒。
      【解决方案3】:

      [部分答案]:我遇到了类似的问题,最终使用这个 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 服务。

      【讨论】:

        【解决方案4】:

        如果您从 .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 带到网络服务,我会使用上面提到的 json.org 的 Javascript 库。您也可以使用 JayRock 轻松地将 JSON 字符串转换为 JsonObject。

        【讨论】:

          猜你喜欢
          • 2012-04-03
          • 1970-01-01
          • 1970-01-01
          • 2015-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多