zoukankan      html  css  js  c++  java
  • 序列化和反序列化

    1. 使用序列号和反序列化需要引入的命名空间using System.Web.Script.Serialization;

               需要添加的引用 system.web.Extensions

    1. /// <summary>
              /// DataTable2Json
              /// </summary>
              /// <param name="dt"></param>
              /// <returns></returns>
              public static string DataTable2Json(DataTable dt)
              {
                  JavaScriptSerializer serializer = new JavaScriptSerializer();
                  List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
                  string json = "{Rows:";

                  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);
                  }

                  json = json + serializer.Serialize(list) + "}";
                  return json;
              }

    2. /// <summary>   
    3. /// 扩展方法,将一个Json字符串反序列化为DataTable   
    4. /// </summary>   
    5. /// <typeparam name="T">类型</typeparam>   
    6. /// <param name="str"></param>   
    7. /// <returns>DataTable</returns>   
    8. public static DataTable DerializeToDataTable<T>(this string str)  
    9. {  
    10.     DataTable dt = new DataTable();  
    11.     if (str[0] == '[')//如果str的第一个字符是'[',则说明str里存放有多个model数据   
    12.     {  
    13.         //删除最后一个']'和第一个'[',顺序不能错。不然字符串的长度就不对了。   
    14.         //因为每个model与model之间是用 ","分隔的,所以改为用 ";"分隔   
    15.         str = str.Remove(str.Length - 1, 1).Remove(0, 1).Replace("},{""};{");  
    16.     }  
    17.     JavaScriptSerializer js = new JavaScriptSerializer();  
    18.     string[] items = str.Split(';');//用";"分隔开多条数据   
    19.     foreach (PropertyInfo property in typeof(T).GetProperties())//反射,获得T类型的所有属性   
    20.     {  
    21.         //创建一个新列,列名为属性名,类型为属性的类型。   
    22.         DataColumn col = new DataColumn(property.Name, property.PropertyType);  
    23.         dt.Columns.Add(col);  
    24.     }  
    25.   
    26.     //循环,一个一个的反序列化   
    27.     for (int i = 0; i < items.Length; i++)  
    28.     {  
    29.         //创建新行   
    30.         DataRow dr = dt.NewRow();  
    31.   
    32.         //反序列化为一个T类型对象   
    33.         T temp = js.Deserialize<T>(items[i]);  
    34.         foreach (PropertyInfo property in typeof(T).GetProperties())  
    35.         {  
    36.             //赋值   
    37.             dr[property.Name] = property.GetValue(temp, null);  
    38.         }  
    39.        dt.Rows.Add(dr);  
    40.     }  
    41.     return dt;  
    42. }  
  • 相关阅读:
    CSS笔记
    EasyUI笔记
    EasyUI treegrid 获取编辑状态中某字段的值 [getEditor方法获取不到editor]
    2019.10.12解题报告
    %lld 和 %I64d
    关于kmp算法
    洛谷p2370yyy2015c01的U盘题解
    About me & 友链
    关于Tarjan
    洛谷p3398仓鼠找suger题解
  • 原文地址:https://www.cnblogs.com/menglin/p/3394134.html
Copyright © 2011-2022 走看看