欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#中datatable序列化与反序列化实例分析

程序员文章站 2023-12-16 22:42:40
本文实例讲述了c#中datatable序列化与反序列化,分享给大家供大家参考。具体方法如下: 一、datatable序列化 public string gets...

本文实例讲述了c#中datatable序列化与反序列化,分享给大家供大家参考。具体方法如下:

一、datatable序列化

public string getsenddetailquery(datetime times, datetime timee, string sccount)
{
  try
  {
 smsoperate so = new smsoperate();

    //得到dt
 datatable dtt = so.getsenddetailquery(times, timee, sccount);
 javascriptserializer serializer = new javascriptserializer();    
 string aaa = serialize(dtt, false);//datatable不能直接序列化,此为序列化方法
 return "0:" + aaa;
 
  }
  catch (exception e)
  {
 return "-1" + e.message;
  }
}

/// <summary>序列化方法
/// 不需要分页
/// </summary>
/// <param name="dt"></param>
/// <param name="flag">false</param>
/// <returns></returns>
public string serialize(datatable dt, bool flag)
{
  javascriptserializer serializer = new javascriptserializer();
  list<dictionary<string, object>> list = new list<dictionary<string, object>>();
  foreach (datarow dr in dt.rows)
  {
 dictionary<string, object> result = new dictionary<string, object>();
 foreach (datacolumn dc in dt.columns)
 {
   result.add(dc.columnname, dr[dc].tostring());
 }
 list.add(result);
  }
  return serializer.serialize(list); ;
}

二、datatable反序列化

public datatable getsenddetailtest()
{
  datatable dtb = new datatable();

  //得到序列化结果aaa
  string aaa = getsenddetailquery(convert.todatetime("2012-01-01 00:00:00"), convert.todatetime("2012-05-01 23:59:59"), "wangsub1");

  if (aaa.substring(0, 1) == "0")
  {
 try
 {
   javascriptserializer serializer = new javascriptserializer();
  // var obj = serializer.deserializeobject(aaa);//反序列化

 aaa=aaa.substring(2,aaa.length-2);

   arraylist dic = serializer.deserialize<arraylist>(aaa);//反序列化arraylist类型
  
   if (dic.count > 0)
   {
 foreach (dictionary<string, object> drow in dic)
 {
   if (dtb.columns.count == 0)
   {
  foreach (string key in drow.keys)
  {
    dtb.columns.add(key, drow[key].gettype());//添加dt的列名
  }
   }
   datarow row = dtb.newrow();
   foreach (string key in drow.keys)
   {

  row[key] = drow[key];//添加列值
   }
   dtb.rows.add(row);//添加一行
 }
   }
 }
 catch (exception e)
 {
   //
 }
  }
  else
  {
 //
  }
  
  return dtb;
}

希望本文所述对大家c#程序设计的学习有所帮助。

上一篇:

下一篇: