我有一个网络服务应该返回收件箱中的前5个电子邮件并将其显示在数据网格中。我先将数据放入DataTable
。但不断收到错误
这是我的代码,我错过了什么或宣布错误吗?
[WebMethod]
public DataTable DisplayMailList(String inMailServer, String inPort, bool inSSlCheck, String inUsername, String inPassword)
{
objClient.Connect(inMailServer, int.Parse(inPort), inSSlCheck);
objClient.Authenticate(inUsername, inPassword);
int count = objClient.GetMessageCount();
DataTable dtMessages = new DataTable(); // Creating datatable.
dtMessages.Columns.Add("MessageNumber");
dtMessages.Columns.Add("From");
dtMessages.Columns.Add("Subject");
dtMessages.Columns.Add("DateSent");
dtMessages.TableName = "dtMessages";
int counter = 0;
for (int i = count; i >= 1; i--)
{
OpenPop.Mime.Message msg = objClient.GetMessage(i);
dtMessages.Rows.Add();
dtMessages.Rows[dtMessages.Rows.Count - 1]["MessageNumber"] = i; //Populateing Datatable
dtMessages.Rows[dtMessages.Rows.Count - 1]["Subject"] = msg.Headers.Subject;
dtMessages.Rows[dtMessages.Rows.Count - 1]["DateSent"] = msg.Headers.DateSent;
counter++;
if (counter > 5)
{
break;
}
}
return dtMessages;
}
认为问题是公开的 DataTable 我把它声明为一个对象但是没有工作以太......叹了口气,我应该把它声明为什么?
这是错误......
System.InvalidOperationException:生成错误时出错 XML文档。 ---> System.InvalidOperationException:无法序列化 DataTable。未设置DataTable名称。
答案 0 :(得分:12)
将值分配给dtMessages.DataTable
名称将停止序列化错误,如错误消息所示。
[WebMethod]
public DataTable GetDataTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("Col1", typeof(string));
dt.Rows.Add("testing");
dt.TableName = "Blah"; // <---
return dt;
}
但我同意Bob Horn的说法,你最好为你的返回值定义一个类而不是使用DataTable。
答案 1 :(得分:5)
创建数据表对象时只需提供一个表名
DataTable dt = new DataTable("tablename");
答案 2 :(得分:0)
这对我有用:
在您的申请中
public void app()
{
try
{
DataTable dtInput = new DataTable();
DataRow drRow;
dtInput.Columns.Add("ID");
dtInput.Columns.Add("Name");
drRow = dtInput.NewRow();
drRow["ID"] = 1;
drRow["Name"] = "Star";
dtInput.Rows.Add(drRow);
dtInput.TableName = "Input";//Table name is mandatory to avoid serialization exception
DataTable dtOutput = new DataTable();
dtOutput.TableName = "Output";//Table name is mandatory to avoid serialization exception
service.TestService(dtInput ,ref dtOutput);
}
catch (Exception ex)
{
}
}
在您的服务中
DataTable dtOutput= new DataTable();
[WebMethod]
public void TestService(DataTable dtInput , ref DataTable dtOutput)
{
DataRow drRow;
drRow= dtInput.NewRow();
drRow["ID"] = 2;
drRow["Name"] = "Success";
dtInput.Rows.Add(drRow);
dtOutput= dtInput;
}