我正在学习C#,在其中一项作业中,我必须使用WPF应用程序和web引用,在单击按钮时将Access文件中的数据显示到DataGrid中。
有一个SOAP异常,我无法解决,任何帮助都将不胜感激,提前感谢-
Web引用asmx文件包含以下方法,即点击按钮调用-
[WebMethod]
public ArrayList queryDB()
{
string selectStmt = "select * from Students";
OleDbConnection conn_obj = new DBConnect().checkDBStatus(databaseLocation);
conn_obj.Open();
OleDbCommand query = new OleDbCommand(selectStmt, conn_obj);
OleDbDataReader dbReader = query.ExecuteReader();
ArrayList dbRecordList = new ArrayList();
foreach (DbDataRecord dbRecord in dbReader)
{
dbRecordList.Add(dbRecord);
}
conn_obj.Close();
return dbRecordList;
}
WPF文件代码如下-"按钮点击方法">
private void GetData_Click(object sender, RoutedEventArgs e)
{
ArrayList datagridList = (ArrayList) websrvc.queryDB();
dataGrid.ItemsSource = datagridList;
}
上面的代码正在创建一个错误-无法将类型"object[]"隐式转换为"System"。集合。阵列列表'
因此,基于网络上的一个建议,将代码更改为以下-
private void GetData_Click(object sender, RoutedEventArgs e)
{
object obj = websrvc.queryDB();
ArrayList datagridList = (ArrayList) obj;
dataGrid.ItemsSource = datagridList;
}
现在,似乎没有错误,但在下面的代码行出现了一个异常,我无法解决这个问题-
object obj = websrvc.queryDB();
{"System.Web.Services.Protocols.SoapException:服务器无法处理请求。--->System.InvalidOperationException:生成XML文档时出错。--->无法序列化System.Data.Common.DataRecordInternal,因为它没有无参数构造函数。\n位于System.XML.SerializationTypeDesc.CheckSupported()\n在系统中。Xml。序列化。TypeScope。系统中的GetTypeDesc(类型类型、MemberInfo源、布尔directReference、布尔throwOnError)。Xml。序列化。XmlSerializationWriter。系统中的CreateUnknownTypeException(类型类型)。Xml。序列化。XmlSerializationWriter。WriteTypedPrimitive(字符串名称、字符串ns、对象o、布尔xsiType)\n在Microsoft。Xml。序列化。生成的程序集。XmlSerializationWriter1.Write1_Object(字符串n、字符串ns、对象o、布尔值isNullable、布尔值needType)\n位于Microsoft。Xml。序列化。生成的程序集。XmlSerializationWriter1.Write2_queryDBResponse(Object[]p)\n位于Microsoft。Xml。序列化。生成的程序集。ArrayOfObjectSerializer1.Serialize(Object objectToSerialize,XmlSerializationWriter编写器)\n位于系统。Xml。序列化。XmlSerializer。序列化(XmlWriter XmlWriter、Object o、XmlSerializerNamespaces命名空间、String encodingStyle、String id)\n----内部异常堆栈跟踪结束---\n在系统中。Xml。序列化。XmlSerializer。在系统上序列化(XmlWriter XmlWriter、Object o、XmlSerializerNamespaces命名空间、String encodingStyle、String id)。网状物服务。协议。SoapServerProtocol。系统上的WriteReturns(Object[]returnValues,Stream outputStream)。网状物服务。协议。WebServiceHandler。系统中的WriteReturns(Object[]returnValues)。网状物服务。协议。WebServiceHandler。Invoke()\n---内部异常堆栈跟踪结束---"}
- 在web服务端创建一个名为Student的类,其中包含要发送到客户端的所有属性
- 将此类标记为可序列化
- 将DB对象属性逐一映射到此Student类
- 从服务中,返回ArrayList(),而不是返回ArrayList
请告诉我这是否有效。