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(); } } }