当前位置:编程学习 > C#/ASP.NET >>

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;  
        }  
搬了一下刚才在另外一个问题中的回复,希望对你的问题有帮助. :) --------------------编程问答--------------------
PatrickPan
    WebService的设计要考虑到兼容性(.net,Java,php),ArrayList 是一个线性列表对象,不是WebService支持的标准对象。从OO的角度来降,传递ArrayList也不太合理。建议改用别的对象。
    如果非要传递ArrayList,可以考虑用序列化反序列化。
--------------------编程问答-------------------- 建议进行序列化合反序列化一下 --------------------编程问答--------------------
建议 返回  数组 --------------------编程问答-------------------- 返回数组应该可以的 --------------------编程问答-------------------- 建议返回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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,