logo头像

Edward.K Thinking

如何序列化Datatable / Dataset物件

在做SOA機制上,有需要接受DatatableDataSet傳送給SOA平台,但是,物件無法這樣直接傳遞,必須先做過序列化才有辦法將物件傳遞出去。

DataTable 序列化


1
2
3
4
5
6
7
8
9
internal string DatatableSerialize(System.Data.DataTable _dt)
{

System.Xml.Serialization.XmlSerializer s = new System.Xml.Serialization.XmlSerializer(_dt.GetType());
StringBuilder sb = new StringBuilder();
StringWriter wr = new StringWriter(sb);
s.Serialize(wr, _dt);
return sb.ToString();
}

DataTable反序列化


1
2
3
4
5
6
7
8
9
10
internal DataTable DatatableDeserialize(string _strDATA)
{
DataTable dt = new DataTable();
System.Xml.XmlDocument xdoc = new System.Xml.XmlDocument();
xdoc.LoadXml(_strDATA);
System.Xml.XmlNodeReader r = new System.Xml.XmlNodeReader(xdoc.DocumentElement);
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(dt.GetType());
object ob = ser.Deserialize(r);
return ob as DataTable;
}

若是要把DataTable改成Dataset呢?只要在序列化的傳遞物建部分改成Dataset就可以。而在反序列化部分,要修改這兩部分。ds為DataSet物件,並將回傳的ob轉型為Dataset就可以

1
2
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(ds.GetType());
return ob as DataSet;

本篇主要只是針對後續真的必需DataSet或是DataTable要做序列化的朋友提供一個語法方式,若是架構允許話,透過Web Service或WCF傳輸資料,最好還是不要使用DataSet或DataTable型別,這樣對於效能上是會有影響


參考資料

如何用 C# 撰寫序列化(Serialize)與反序列化(Deserialize)

上一篇