Ho notato che usando i metodi WriteXml e ReadXml del DataSet per serializzare in un DiffGram (XML) N DataTable, il risultato (la deserializzazione) è quello di avere per ogni DataTable le sole Column realmente popolate, e tutte tipizzate a string, perdendo il tipo originale......
es:
var dt = new DataTable();
dt.Columns.Add("dt",typeof(DateTime));
dt.Columns.Add("i",typeof(int32));
dt.Rows.Add(dt.NewRow());
dt.Rows[0]["dt"] = DateTime.Now;
dt.Rows[0]["i"] = 150; //omettendo questa riga, nel datatable deserializzato la colonna scompare
var s = new DataSet();
s.Tables.Add(dt);
var m = new MemoryStream();
s.WriteXml(m);
var s2 = new DataSet();
s2.ReadXml(new MemoryStream(m.ToArray()));
// i tipi delle colonne nel DT originale sono DateTime e int32, nel DT deserializzato sempre string..... mah