关于.net中dataTable的xml序列化的奇怪问题

本文探讨了使用.NET的XmlSerializer对DataTable进行序列化时遇到的一个奇怪问题:当DataTable的Columns为空时,序列化过程虽然没有错误,但在反序列化过程中会抛出异常。文章通过对比两种不同情况下的代码示例,揭示了这一问题的现象。

最近写一些关于文件读取和存储的东西,因为想偷一下懒,所以直接使用了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的格式有错误,就应该再写文件的时候出错.可是写文件正常.倒是在读文件的时候才抛出错误。这个行为真是让人无法理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值