6

受信トレイに上位5通のメールを返し、データグリッドに表示するWebサービスがあります。私は自分のデータを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名が設定されていません。

4

3 に答える 3

14

nameに値を割り当てる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;
    }

しかし、DataTableを使用するよりも、戻り値のクラスを定義する方がよいというボブ・ホーンに同意します。

于 2012-05-02T14:35:27.067 に答える
6

データテーブルオブジェクトを作成するときにテーブル名を付けるだけです

DataTable dt = new DataTable("tablename");
于 2015-07-21T06:59:02.437 に答える
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;
       }
于 2013-06-12T10:35:56.527 に答える