C# 在wcf服务响应中接收DataTable时出错

C# 在wcf服务响应中接收DataTable时出错,c#,wcf,C#,Wcf,我正在用c#开发一个windows窗体应用程序。我的数据库在wcf应用程序中处理。在我的wcf应用程序中,我有一个名为讲师的类,它有一个名为view讲师()的方法,如下所示。我的目的是在网格视图中查看讲师表 public DataTable viewLec() { SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["resourceAlloc"].To

我正在用c#开发一个windows窗体应用程序。我的数据库在wcf应用程序中处理。在我的wcf应用程序中,我有一个名为讲师的类,它有一个名为view讲师()的方法,如下所示。我的目的是在网格视图中查看讲师表

public DataTable viewLec()
        {

            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["resourceAlloc"].ToString());

            DataTable dt = new DataTable();
            string vw = "select * from lecturers";

            SqlCommand cmd = new SqlCommand(vw,con);

            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            adp.Fill(dt);


            return dt;

        }
在我的iSeries.cs中:

  [OperationContract]
        DataTable viewLecturer();
Service1.svc.cs:

public DataTable viewLecturer()
        {
            Lecturer lec = new Lecturer();
            return lec.viewLec();

        }
在我的windows窗体应用程序按钮中,单击事件

private void button2_Click(object sender, EventArgs e)
{
    Service1Client obj = new Service1Client();   
    dataGridView1.DataSource = obj.viewLecturer();      
}

当我单击查看按钮时,出现了上述错误,我无法理解为什么?

我不知道代码的确切错误,但我想提到的第一件事是,使用DataTable对象作为数据协定不是最好的主意,因为它包含一定量的额外数据,而这些数据通常不会被最终应用程序使用。但无论如何,在您的特定情况下,WCF将无法序列化您的对象,因为它没有表名,该表名是此类执行序列化所必需的。试着这样做:

 DataTable dt = new DataTable();
 // Must set name for serialization to succeed.
 dt.TableName = "lecturers";

我看不出您的实际错误(您应该发布它以使您的答案更清楚),但至少这将帮助您避免序列化错误。

Ya这就是错误。.我没有提到表名,现在好了