C#实现将json转换为DataTable的方法

 更新时间:2015年03月10日 16:16:40   作者:MeGoodtoo  
这篇文章主要介绍了C#实现将json转换为DataTable的方法,涉及C#操作json及DataTable的技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了C#实现将json转换为DataTable的方法。分享给大家供大家参考。具体实现方法如下:

复制代码 代码如下:
#region 将json转换为DataTable
/// <summary>
/// 将json转换为DataTable
/// </summary>
/// <param name="strJson">得到的json</param>
/// <returns></returns>
private DataTable JsonToDataTable(string strJson)
{
    //转换json格式
    strJson = strJson.Replace(",\"", "*\"").Replace("\":", "\"#").ToString();
    //取出表名  
    var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);
    string strName = rg.Match(strJson).Value;
    DataTable tb = null;
    //去除表名  
    strJson = strJson.Substring(strJson.IndexOf("[") + 1);
    strJson = strJson.Substring(0, strJson.IndexOf("]"));
    //获取数据  
    rg = new Regex(@"(?<={)[^}]+(?=})");
    MatchCollection mc = rg.Matches(strJson);
    for (int i = 0; i < mc.Count; i++)
    {
 string strRow = mc[i].Value;
 string[] strRows = strRow.Split('*');
 //创建表  
 if (tb == null)
 {
     tb = new DataTable();
     tb.TableName = strName;
     foreach (string str in strRows)
     {
  var dc = new DataColumn();
  string[] strCell = str.Split('#');
  if (strCell[0].Substring(0, 1) == "\"")
  {
      int a = strCell[0].Length;
      dc.ColumnName = strCell[0].Substring(1, a - 2);
  }
  else
  {
      dc.ColumnName = strCell[0];
  }
  tb.Columns.Add(dc);
     }
     tb.AcceptChanges();
 }
 //增加内容  
 DataRow dr = tb.NewRow();
 for (int r = 0; r < strRows.Length; r++)
 {
     dr[r] = strRows[r].Split('#')[1].Trim().Replace(",", ",").Replace(":", ":").Replace("\"", "");
 }
 tb.Rows.Add(dr);
 tb.AcceptChanges();
    }
    return tb;
}
#endregion

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

相关文章

  • IIS下调用证书出现异常的解决方法 (C#)

    IIS下调用证书出现异常的解决方法 (C#)

    这篇文章主要为大家详细介绍了IIS下调用证书出现异常的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 关于C# dynamic装箱问题

    关于C# dynamic装箱问题

    装箱是将值类型转换为类型对象或此值类型实现的任何接口类型的过程,装箱和拆箱的概念是 C# 类型系统统一视图的基础,其中任何类型的值都可以视为对象,这篇文章主要介绍了关于C# dynamic装箱引发的思考,需要的朋友可以参考下
    2022-05-05
  • SuperSocket封装成C#类库的步骤

    SuperSocket封装成C#类库的步骤

    这篇文章主要介绍了SuperSocket封装成C#类库的步骤,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2021-01-01
  • 使用C#编写简单的图形化的可发送附件的邮件客户端程序

    使用C#编写简单的图形化的可发送附件的邮件客户端程序

    这篇文章主要介绍了使用C#编写一个图形化的可发送附件的邮件客户端程序的方法,文中的示例同样是基于支持smtp协议的邮件服务器,需要的朋友可以参考下
    2016-02-02
  • 详解如何在C#/.NET Core中使用责任链模式

    详解如何在C#/.NET Core中使用责任链模式

    这篇文章主要介绍了详解如何在C#/.NET Core中使用责任链模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • WPF中引入WindowsForms控件的方法

    WPF中引入WindowsForms控件的方法

    这篇文章主要介绍了WPF中引入WindowsForms控件的方法,结合实例形式分析了在WPF中调用Windows Forms控件的具体步骤与相关实现技巧,需要的朋友可以参考下
    2016-07-07
  • 详解C#如何为某个方法设定执行超时时间

    详解C#如何为某个方法设定执行超时时间

    这篇文章主要为大家详细介绍一下C#如何为某个方法设定执行超时时间,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以学习一下
    2023-10-10
  • 新手小白用C# winform 读取Excel表的实现

    新手小白用C# winform 读取Excel表的实现

    这篇文章主要介绍了新手小白用C# winform 读取Excel表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • C# 中使用隐式和显式操作符的示例

    C# 中使用隐式和显式操作符的示例

    这篇文章主要介绍了C# 中使用隐式和显式操作符的示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-04-04
  • unity 鼠标悬停事件操作

    unity 鼠标悬停事件操作

    这篇文章主要介绍了unity 鼠标悬停事件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04

最新评论