zoukankan      html  css  js  c++  java
  • 将json字符串反序列化为DataTable 对JsonConvert的补充

    /// <summary>
    /// 扩展方法,将一个Json字符串反序列化为DataTable
    /// </summary>
    /// <typeparam name="T">类型</typeparam>
    /// <param name="str"></param>
    /// <returns>DataTable</returns>
    public static DataTable DerializeToDataTable<T>(this string str)
    {
    DataTable dt = new DataTable();
    if (str[0] == '[')//如果str的第一个字符是'[',则说明str里存放有多个model数据
    {
    //删除最后一个']'和第一个'[',顺序不能错。不然字符串的长度就不对了。
    //因为每个model与model之间是用 ","分隔的,所以改为用 ";"分隔
    str = str.Remove(str.Length - 1, 1).Remove(0, 1).Replace("},{", "};{");
    }
    JavaScriptSerializer js = new JavaScriptSerializer();
    string[] items = str.Split(';');//用";"分隔开多条数据
    foreach (PropertyInfo property in typeof(T).GetProperties())//反射,获得T类型的所有属性
    {
    //创建一个新列,列名为属性名,类型为属性的类型。
    DataColumn col = new DataColumn(property.Name, property.PropertyType);
    dt.Columns.Add(col);
    }

    //循环,一个一个的反序列化
    for (int i = 0; i < items.Length; i++)
    {
    //创建新行
    DataRow dr = dt.NewRow();

    //反序列化为一个T类型对象
    T temp = js.Deserialize<T>(items[i]);
    foreach (PropertyInfo property in typeof(T).GetProperties())
    {
    //赋值
    dr[property.Name] = property.GetValue(temp, null);
    }
    dt.Rows.Add(dr);
    }
    return dt;
    }

    You Must Try !
  • 相关阅读:
    Ts基础
    SWF 文件不能本地访问 只有仅限于文件系统的 SWF 文件
    laya的UI编辑器
    目前支持WebGL的浏览器有哪些?
    Laya学习
    egret学习
    PHP 获取上月,本月,近15天,近30天日期
    深入浅出:MySQL的左连接、右连接、内连接
    div中 li宽度不固定 ie6和ie7不兼容不自动换行
    8款给力HTML5/CSS3应用插件 可爱的HTML5笑脸
  • 原文地址:https://www.cnblogs.com/myleeblog/p/5564616.html
Copyright © 2011-2022 走看看