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#程序设计的学习有所帮助。