最近写一些关于文件读取和存储的东西,因为想偷一下懒,所以直接使用了XmlSerializer来直接对DateTable进行序列化。可是很不巧在读取的时候偶尔会发生错误。经过自己的排查。发现.net的XmlSerialize有一个很奇怪的问题;
下面是正确的运行的代码
DataTable dt = new DataTable("gg");
dt.Columns.Add("a");
dt.Columns.Add("b");
dt.Columns.Add("c");
DataRow dr = dt.NewRow();
dr["a"] = 1;
dr["b"] = 2;
dr["c"] = 3;
dt.Rows.Add(dr);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
XmlWriter writer = XmlWriter.Create("c://testa.xml");
try
{
serializer.Serialize(writer, dt);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
writer.Close();
DataTable dt2;
XmlReader reader = XmlReader.Create("c://testa.xml");
dt2 = (DataTable)serializer.Deserialize(reader);
reader.Close();
这个时候运行正确;可是当column为空时候,保存并不会出错,可是读取的时候就会产生错误.如下面的代码
DataTable dt = new DataTable("gg");
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
XmlSerializer serializer = new XmlSerializer(typeof(DataTable));
XmlWriter writer = XmlWriter.Create("c://testa.xml");
try
{
serializer.Serialize(writer, dt);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
writer.Close();
DataTable dt2;
XmlReader reader = XmlReader.Create("c://testa.xml");
dt2 = (DataTable)serializer.Deserialize(reader);
reader.Close();
这个错误真是古怪.如果datatable的格式有错误,就应该再写文件的时候出错.可是写文件正常.倒是在读文件的时候才抛出错误。这个行为真是让人无法理解。
本文探讨了使用.NET的XmlSerializer对DataTable进行序列化时遇到的一个奇怪问题:当DataTable的Columns为空时,序列化过程虽然没有错误,但在反序列化过程中会抛出异常。文章通过对比两种不同情况下的代码示例,揭示了这一问题的现象。
2349

被折叠的 条评论
为什么被折叠?



