100分求解,WebService中的方法要返回一个ArrayList类型,但是却抱错,又没有兄弟做过?怎么实现?求教了!
是这样,我的WebServicez的方法AFunction中必须返回一个ArrayList类型[WebMethod]
public ArrayList AFunction()
{
ArrayList A = new ArrayList();
......
//中间过程省略
......
return A;
}
A返回值中实际包含的是一个string[]数组,也就是类似于下面的结构:
|----string[0]
A[0]--------
|----string[1]
|----string[0]
A[1]--------
|----string[1]
|----string[0]
A[2]--------
|----string[1]
|----string[0]
A[3]--------
|----string[1]
编译没有问题,可就是一运行就不行,还没到客户端那边,在服务器端就报错,说是什么“不能在上下文中使用”
我想问:
是不是无法返回ArrayList类型?如果有办法的话如何解决?
最好不要让我把返回类型改成字符串,因为那样的话,我知道没问题,但是其他很多接口都要改!
请高手尽量在ArrayList返回类型上帮我想办法!最好能解释详细一点,给出较完整的例子和必要代码!
谢谢了!
--------------------编程问答-------------------- using System;
.................
using HumanResource;
namespace ServiceTest
{
public class MyService : System.Web.Services.WebService
{
public MyService()
{
.........
}
...............
//方法
[WebMethod]
public string GetEmployee( )
{
Employee m_emp = new Employee();
return Serializer.Serialize(m_emp);
}
}
}
在访问webservice的一端,先将返回的序列化之后的对象反序列化为实体类后再来使用。
using HumanResource;
namespace ServiceClientTest
{
public class MyServiceClient
{
public MyServiceClient()
{
.........
}
...............
//方法
public Employee GetEmployee( )
{
string strm_emp = service.GetEmployee( );
return Serializer.DeSerialize(m_emp) as Employee;
}
}
}
客户端程序(可能也是个web程序)通过调用MyServiceClient的方法来访问WebService.
二进制序列化反序列化的方法:
public static string Serialize(object obj)
{
string serializedObject = null;
if (obj != null)
{
IFormatter formatter = new BinaryFormatter();
using (Stream stream = new MemoryStream())
{
formatter.Serialize(stream, obj);
long count = stream.Length;
byte[] buff = new byte[count];
stream.Seek(0, SeekOrigin.Begin);
stream.Read(buff, 0, Convert.ToInt32(count));
stream.Close();
serializedObject = Convert.ToBase64String(buff);
}
}
return serializedObject;
}
public static object DeSerialize(string serializedObject)
{
object @object = null;
if (serializedObject!="")
{
IFormatter fter = new BinaryFormatter();
byte[] buff = Convert.FromBase64String(serializedObject);
using (Stream stream = new MemoryStream(buff))
{
@object = fter.Deserialize(stream);
stream.Close();
}
}
return @object;
}
搬了一下刚才在另外一个问题中的回复,希望对你的问题有帮助. :) --------------------编程问答-------------------- --------------------编程问答-------------------- 建议进行序列化合反序列化一下 --------------------编程问答--------------------
建议 返回 数组 --------------------编程问答-------------------- 返回数组应该可以的 --------------------编程问答-------------------- 建议返回json对象!
--------------------编程问答-------------------- json是什么? 帮顶! --------------------编程问答-------------------- ArrayList类型是不可以被序列化的
所以说返回类型不能是ArrayList类型 --------------------编程问答-------------------- 以后需再关注,现在先帮你顶一下 --------------------编程问答-------------------- 应该使用webservice可使用的标准数据类型:
String、Int32、Byte、Boolean、Int16、Int64、Single、Double、Decimal、DateTime(类似XML中的timeInstant)、 DateTime(类似XML中的date)、DateTime(类似XML中的time) 以及上述类型的数组
对自定义的类和结构虽然可以和webservice一起发布,不过个人认为还是不使用为好,对于复杂类型,最好序列化成XML 字符串,客户端通过反序列化就能将数据还原。
另外序列化为Byte数组再传输,个人也认为不妥,应为web service需要提供大家都能理解的数据,所以XML 字符串是最好的选择。
楼主所说的ArrayList 中的内容完全可以序列化成XML 供接口返回。 --------------------编程问答-------------------- 不知,帮顶
补充:.NET技术 , Web Services