标签:序列化和反序列化
本文介绍使用使用WriteXml,ReadXml对DataTable序列化反序列化,同时处理"DataTable 不支持来自 XML 的架构推断。"错误.
由于DataTable本身就实现了ISerializable, IXmlSerializable接口.所以本身就支持序列化反序列化.
DataTable是个很好的数据类型
1.数据库中的表完全对应.
2.Repleater,DataGrid等控件都支持对它的绑定.
3.在代码中循环遍历特别方便.
但为了网络传输,或者离线保存,就需要序列化反序列化为xml.WriteXml,ReadXml就是实现次目的的.
一.使用WriteXml序列化DataTable:
准备数据:
- create table sitemaps
- (
- url varchar(255),
- title varchar(255)
- )
- insert sitemaps
- select 'http://www.it118.org', 'it智库网'
- union all
- select 'http://bbs.it118.org', 'it智库网论坛'
C#处理代码:
- SqlConnection connection = new SqlConnection("Server=localhost;Database=testdb;uid=sa;pwd=sa");
- connection.Open();
- SqlCommand selectCommand = new SqlCommand(string.Format("SELECT * from sitemaps"), connection);
- DataTable dataTable = new DataTable("sitemaps"); //注意table一定需要有tablename
- new SqlDataAdapter(selectCommand).Fill(dataTable);
- connection.Close();
- dataTable.WriteXml("d:\\sitemaps.xml");
其中sitemaps.xml:
- <?xml version="1.0" standalone="yes"?>
- <DocumentElement>
- <sitemaps>
- <url>http://www.it118.org</url>
- <title>it智库网</title>
- </sitemaps>
- <sitemaps>
- <url>http://bbs.it118.org</url>
- <title>it智库网论坛</title>
- </sitemaps>
- </DocumentElement>
二.使用ReadXml序列化DataTable:
如果代码如下:
- DataTable dt = new DataTable();
- dt.ReadXml("d:\\sitemaps.xml");
就会提示:DataTable 不支持来自 XML 的架构推断。
正确代码如下:
- DataTable dt = new DataTable("sitemaps");
- dt.Columns.Add("url");
- dt.Columns.Add("title");
- dt.ReadXml("d:\\sitemaps.xml");
三.应用
我曾经有特殊需要.在本地使用WriteXml生成xml,传输到别的地方使用ReadXml读取.