【问题标题】:How to return a HashTable from a WebService?如何从 WebService 返回 HashTable?
【发布时间】:2013-05-30 06:33:52
【问题描述】:

我的网络服务正在返回所有字符串变量。现在我想修改我的服务,以便它可以返回 HashTable 对象。这是我的 WebService 入口点(方法)的签名:

public void getPrevAttempts(string fbUserId, string studentId, string assessmentId, out string isAuthenticated, out HashTable attempts) 

HashTable 中的记录是从 SQL 查询的结果中插入的。每当我尝试运行我的服务时,我都会被重定向到 accessdenied.htm 页面(因为我的 Web.config 有这个条目 <customErrors mode="On" defaultRedirect="accessdenied.htm"/>)。有没有什么方法可以返回HashTable或者SQL查询的结果?

更新:

例外:The type System.Collections.Hashtable is not supported because it implements IDictionary.

【问题讨论】:

  • 服务返回的错误是什么?
  • HashTable,90 年代又来了……
  • 我很确定 Web 服务签名中不支持 out 参数。您也可能会遇到序列化问题,尤其是跨平台(字符串是普遍已知的类型,但 .Net Hashtable 不是)。但是,哈希表 被标记为可序列化,所以我会尝试的第一件事是将其用作返回值。
  • 您可以返回DataSetDataTable
  • @Tim Medora:支持out 参数。是否应该由 Web 服务方法使用它们是另一回事。

标签: c# web-services


【解决方案1】:

将数据序列化为 JSON 字符串并返回给客户端。

var serializer = new JavaScriptSerializer();
HashTable ht = New HashTable();
//Populate ht.
response = serializer.Serialize(ht) // This will serialize the data to JSON format.

在客户端,使用反序列化

httpResponse = JSON.parse(response); //httpResponse will have key value pair data as you created in server.

【讨论】:

    【解决方案2】:

    我认为您应该创建自己的自定义对象或创建一个数组。 您可以将其转换回哈希表。 使用 out 参数也不是一个好主意。 最好创建一个以 IsAuthenticated 和 Attempts 作为属性的自定义类。

    【讨论】:

      【解决方案3】:

      您可以轻松地将 HashTable 转换为 List<KeyValuePair<string, string>> 并返回...

      与其返回数据结构,不如考虑返回数据 - 并在客户端重建数据结构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多