Я изучаю C#, и в одном из заданий я должен отображать данные из файла Access в DataGrid при нажатии кнопки с использованием приложения WPF и веб-ссылки.SOAP-исключение в приложении WPF при доступе к веб-сервису
Там является SOAP исключение, которое я не в состоянии решить, любая помощь приветствуется, спасибо заранее -
Веб ссылки 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.TypeDesc.CheckSupported() \ n в System.Xml.Serialization. TypeScope.GetTypeDesc (Тип типа, источник MemberInfo, Boolean directReference, Boolean throwOnError) \ n в System.Xml.Serialization.XmlSerializationWriter.CreateUnknownTypeException (тип типа) \ n в System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive (имя строки, строка ns , Object o, Boolean xsiType) \ n в Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object (String n, String ns, Object o, Boolean isNullable, Boolean needType) \ n в Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1. Write2_queryDBResponse (Object [] p) \ n в Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer1.Serialize (Object objectToSerialize, XmlSerializationWriter writer) \ n в System.Xml.Serialization.XmlSeri alizer.Serialize (XmlWriter xmlWriter, Object o, XmlSerializerNamespaces пространства имен, String encodingStyle, String id) \ n --- Конец внутренней трассировки стека исключений --- \ n в System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter, Object o, пространства имен XmlSerializerNamespaces, String encodingStyle, String id) \ n в System.Web.Services.Protocols.SoapServerProtocol.WriteReturns (Object [] returnValues, поток outputStream) \ n в System.Web.Services.Protocols.WebServiceHandler.WriteReturns (объект [] returnValues) \ п на System.Web.Services.Protocols.WebServiceHandler.Invoke() \ п --- Конец внутренней трассировки стека исключений --- "}
Я думаю, вы смотрите здесь на неправильное исключение.Важным кажется, что «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