君子博学而日参省乎己 则知明而行无过矣

博客园 首页 新随笔 联系 订阅 管理

标签:序列化和反序列化

本文介绍使用使用WriteXml,ReadXml对DataTable序列化反序列化,同时处理"DataTable 不支持来自 XML 的架构推断。"错误.

由于DataTable本身就实现了ISerializable, IXmlSerializable接口.所以本身就支持序列化反序列化.

DataTable是个很好的数据类型

1.数据库中的表完全对应.

2.Repleater,DataGrid等控件都支持对它的绑定.

3.在代码中循环遍历特别方便.

但为了网络传输,或者离线保存,就需要序列化反序列化为xml.WriteXml,ReadXml就是实现次目的的. 

一.使用WriteXml序列化DataTable: 

准备数据: 

  1. create table sitemaps   
  2. (  
  3.     url varchar(255),  
  4.     title varchar(255)  
  5. )  
  6.   
  7. insert sitemaps   
  8. select 'http://www.it118.org', 'it智库网'  
  9. union all  
  10. select 'http://bbs.it118.org', 'it智库网论坛'  

C#处理代码:

  1. SqlConnection connection = new SqlConnection("Server=localhost;Database=testdb;uid=sa;pwd=sa");  
  2.   
  3. connection.Open();  
  4.   
  5. SqlCommand selectCommand = new SqlCommand(string.Format("SELECT * from sitemaps"), connection);  
  6.   
  7. DataTable dataTable = new DataTable("sitemaps");  //注意table一定需要有tablename
  8. new SqlDataAdapter(selectCommand).Fill(dataTable);  
  9.   
  10. connection.Close();  
  11.   
  12. dataTable.WriteXml("d:\\sitemaps.xml");  

其中sitemaps.xml:  

  1. <?xml version="1.0" standalone="yes"?>  
  2. <DocumentElement>  
  3.   <sitemaps>  
  4.     <url>http://www.it118.org</url>  
  5.     <title>it智库网</title>  
  6.   </sitemaps>  
  7.   <sitemaps>  
  8.     <url>http://bbs.it118.org</url>  
  9.     <title>it智库网论坛</title>  
  10.   </sitemaps>  
  11. </DocumentElement>  

二.使用ReadXml序列化DataTable:

如果代码如下: 

  1. DataTable dt = new DataTable();  
  2. dt.ReadXml("d:\\sitemaps.xml");  

就会提示:DataTable 不支持来自 XML 的架构推断。

正确代码如下: 

  1. DataTable dt = new DataTable("sitemaps");  
  2. dt.Columns.Add("url");  
  3. dt.Columns.Add("title");  
  4. dt.ReadXml("d:\\sitemaps.xml");  

三.应用

我曾经有特殊需要.在本地使用WriteXml生成xml,传输到别的地方使用ReadXml读取.

posted on 2011-03-20 04:23  刺猬的温驯  阅读(2477)  评论(0编辑  收藏  举报