在做SOA機制上,有需要接受Datatable
或DataSet
傳送給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)