C#中datatable序列化与反序列化实例分析
本文实例讲述了C#中datatable序列化与反序列化,分享给大家供大家参考。具体方法如下:
一、datatable序列化
publicstringgetSendDetailQuery(DateTimetimeS,DateTimetimeE,stringsccount) { try { SmsOperateso=newSmsOperate(); //得到dt DataTabledtt=so.getSendDetailQuery(timeS,timeE,sccount); JavaScriptSerializerserializer=newJavaScriptSerializer(); stringaaa=Serialize(dtt,false);//datatable不能直接序列化,此为序列化方法 return"0:"+aaa; } catch(Exceptione) { return"-1"+e.Message; } } ///<summary>序列化方法 ///不需要分页 ///</summary> ///<paramname="dt"></param> ///<paramname="flag">false</param> ///<returns></returns> publicstringSerialize(DataTabledt,boolflag) { JavaScriptSerializerserializer=newJavaScriptSerializer(); List<Dictionary<string,object>>list=newList<Dictionary<string,object>>(); foreach(DataRowdrindt.Rows) { Dictionary<string,object>result=newDictionary<string,object>(); foreach(DataColumndcindt.Columns) { result.Add(dc.ColumnName,dr[dc].ToString()); } list.Add(result); } returnserializer.Serialize(list);; }
二、datatable反序列化
publicDataTablegetSendDetailTest() { DataTabledtb=newDataTable(); //得到序列化结果aaa stringaaa=getSendDetailQuery(Convert.ToDateTime("2012-01-0100:00:00"),Convert.ToDateTime("2012-05-0123:59:59"),"wangsub1"); if(aaa.Substring(0,1)=="0") { try { JavaScriptSerializerserializer=newJavaScriptSerializer(); //varobj=serializer.DeserializeObject(aaa);//反序列化 aaa=aaa.substring(2,aaa.length-2); ArrayListdic=serializer.Deserialize<ArrayList>(aaa);//反序列化ArrayList类型 if(dic.Count>0) { foreach(Dictionary<string,object>drowindic) { if(dtb.Columns.Count==0) { foreach(stringkeyindrow.Keys) { dtb.Columns.Add(key,drow[key].GetType());//添加dt的列名 } } DataRowrow=dtb.NewRow(); foreach(stringkeyindrow.Keys) { row[key]=drow[key];//添加列值 } dtb.Rows.Add(row);//添加一行 } } } catch(Exceptione) { // } } else { // } returndtb; }
希望本文所述对大家C#程序设计的学习有所帮助。