为什么webservice中的方法返回c#中的Arraylist时发生异常?

为什么webservice中的方法返回c#中的Arraylist时发生异常?,c#,.net,web-services,C#,.net,Web Services,我在返回数组列表的web服务中编写方法,当我得到该方法时,它会生成异常。我的方法如下 //Webservice Method [WebMethod] public ArrayList ReceiveMessage(string strUser) { ArrayList arrList = new ArrayList(); for (int i = 0; i < arrMessage.Count; i++) {

我在返回数组列表的web服务中编写方法,当我得到该方法时,它会生成异常。我的方法如下

   //Webservice Method
    [WebMethod]
    public ArrayList ReceiveMessage(string strUser)
    {
        ArrayList arrList = new ArrayList();

        for (int i = 0; i < arrMessage.Count; i++)
        {
            object[] objArr = (object[])arrMessage[i];
            if (objArr[1].ToString() == strUser)
            {
                arrList.Add(new object[] {objArr[0],objArr[2], objArr[3], objArr[4] });


                arrMessage.RemoveAt(i);
                break;
            }
        }
        return arrList;
    }

    //Method from where i am calling webservice method  
    private void button2_Click(object sender, EventArgs e)
    {

        ArrayList obj = new ArrayList(objService1.ReceiveMessage("ABC"));
    }
//Webservice方法
[网络方法]
public ArrayList ReceiveMessage(字符串结构器)
{
ArrayList arrList=新的ArrayList();
for(int i=0;i
调用webservice方法时生成异常的详细信息如下

System.Web.Services.Protocols.SoapException:服务器无法运行 处理请求。-->System.InvalidOperationException:存在一个 生成XML文档时出错。--> System.InvalidOperationException:类型System.Object[]可能不正确 在这种情况下使用。在 System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(字符串 名称、字符串ns、对象o、布尔xsiType)位于 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_对象(字符串 n、 字符串ns,对象o,布尔值可为空,布尔值类型)位于 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write6_ReceiveMessageResponse(对象[]) p) 在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter)中 xmlWriter,对象o,XmlSerializerNamespaces名称空间,字符串 编码样式,字符串id)--内部异常堆栈跟踪的结束 ---在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter XmlWriter,对象o,XmlSerializerNamespaces,字符串 编码样式,字符串id)位于 System.Xml.Serialization.XmlSerializer.Serialization(XmlWriter XmlWriter, 对象o,XmlSerializerNamespaces,字符串编码样式)
在 System.Web.Services.Protocols.SoapServerProtocol.WriterReturns(对象[]) 返回值,流输出流)在 System.Web.Services.Protocols.WebServiceHandler.WriterReturns(对象[]) 返回值)在 System.Web.Services.Protocols.WebServiceHandler.Invoke()---结束 内部异常堆栈跟踪---


序列化程序不知道如何处理ArrayList中的底层对象数组

您可以通过返回不同的类型(例如泛型列表)或使用以下内容装饰您的方法来修复此问题:

[System.Xml.Serialization.XmlInclude(typeof(Object[]))]
这是一个很好的解释

然而,为了这篇文章的好处,你基本上是告诉代理生成器 类来生成,否则它根本不知道要生成什么,您将得到该异常

基于此,您的webmethod代码可以重写为:

[WebMethod]
[System.Xml.Serialization.XmlInclude(typeof(Object[]))]
public ArrayList ReceiveMessage(string strUser)
{
    ArrayList arrList = new ArrayList();

    for (int i = 0; i < arrMessage.Count; i++)
    {
        object[] objArr = (object[])arrMessage[i];
        if (objArr[1].ToString() == strUser)
        {
            arrList.Add(new object[] { objArr[0], objArr[2], objArr[3], objArr[4] });

            arrMessage.RemoveAt(i);
            break;
        }
    }
    return arrList;
}

希望这有帮助。

不要再使用
ArrayList
。C#没有泛型属于旧时代。下面为ArrayList和泛型列表提供的完整答案我应该指出,列表非常相似,最好在其中使用一个具体类型:)[System.Xml.Serialization.xmlclude(typeof(Object[])]解决了我的问题!
[WebMethod]
public List<object> ReceiveMessage(string strUser)
{
    List<object> list = new List<object>();

    for (int i = 0; i < arrMessage.Count; i++)
    {
        object[] objArr = (object[])arrMessage[i];
        if (objArr[1].ToString() == strUser)
        {
            list.Add(new object[] { objArr[0], objArr[2], objArr[3], objArr[4] });
            arrMessage.RemoveAt(i);
            break;
        }
    }
    return list;
}