我的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.
答案 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>>
并返回...
不要返回数据结构,而是考虑返回数据 - 并在客户端重建数据结构。