DataTable の名前が設定してないとシリアル化できない

DataTable の TableName プロパティが設定されていないとき、シリアル化に失敗する。これは WCF の DataContractSerializer を使ったときも同様。

原因を突き止めるのに1時間ほどかかったので、忘れないようにメモしておく。ホント、うっかりだ。

using System;
using System.Runtime.Serialization;
using System.Data;
using System.IO;
namespace DataTableSample
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable table = new DataTable();
            table.Columns.Add("name", typeof(string));
            table.Rows.Add("わんくま");
            using (MemoryStream stream = new MemoryStream())
            {
                try
                {
                    DataContractSerializer serializer = new DataContractSerializer(typeof(DataTable));
                    serializer.WriteObject(stream, table);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);// => DataTable をシリアル化できません。DataTable の名前が設定されていません。
                }
            }
            Console.ReadLine();
        }
    }
}