我學習C#,並在分配的一個我必須顯示從Access文件中的數據導入時使用WPF應用程序和Web引用按鈕,點擊一個DataGrid。SOAP異常而訪問Web服務
存在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;
}
上面的代碼是創建一個錯誤 - 不能隱ç onvert類型「對象[]」爲「System.Collections.ArrayList」
因此基於一個建議過網,改變下面的代碼 -
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.InvalidOperationException:System.Data.Common.DataRecordInternal無法序列化,因爲它沒有無參數構造函數。\ n在System.Xml.Serialization的System.Xml.Serialization.TypeDesc.CheckSupported()\ n。 TypeScope.GetTypeDesc(類型類型,源的MemberInfo,布爾directReference,布爾throwOnError)\ n在System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeException(類型類型)\ n在System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(字符串名稱,串NS ,對象o,布爾xsiType)\ n在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object(字符串N,串NS,對象o,布爾ISNULLABLE,布爾needType)\ n在Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1。在System.Xml.Serialization.XmlSeri上的Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Serialize(Object objectToSerialize,XmlSerializationWriter writer)\ n中的Write2_queryDBResponse(Object [] p)\ n alize.Serialize(XmlWriter xmlWriter,Object o,XmlSerializerNamespaces命名空間,字符串encodingStyle,字符串id)\ n ---內部異常堆棧跟蹤結束--- \ n在System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,Object O,XmlSerializerNamespaces命名空間,字符串的encodingStyle,字符串ID)\ n在System.Web.Services.Protocols.SoapServerProtocol.WriteReturns(對象[] returnValues,流的OutputStream)\ n在System.Web.Services.Protocols.WebServiceHandler.WriteReturns(對象[] returnValues)\ n在System.Web.Services.Protocols.WebServiceHandler.Invoke()\ n ---內部異常堆棧跟蹤---「}結束
我想你在這裏看錯了異常。重要的一個似乎是'System.Data.Common.DataRecordInternal無法序列化,因爲它沒有無參數的構造函數。這基本上意味着你試圖序列化的一些類使用'DataRecordInternal',它沒有無參數的構造函數,因此不能序列化。您需要將數據保存在不同的(自制)類中。 –
'dataGrid.ItemsSource = websrvc.queryDB();'? – Clemens
我認爲你的解決方案已經在這裏:http://stackoverflow.com/questions/26546339/why-exception-occured-when-method-in-webservice-return-arraylist-in-c?rq = 1 – tabby