为什么webservice中的方法返回c#中的Arraylist时发生异常?
我在返回数组列表的web服务中编写方法,当我得到该方法时,它会生成异常。我的方法如下为什么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++) {
//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;
}