如何从WebService返回HashTable?

时间:2013-05-30 06:33:52

标签: c# web-services

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

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

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

更新

异常:The type System.Collections.Hashtable is not supported because it implements IDictionary.

3 个答案:

答案 0 :(得分:2)

将数据序列化为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.

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

不要返回数据结构,而是考虑返回数据 - 并在客户端重建数据结构。