在CSDN上下载的代码,放到文章里,是为了保存以后用,希望不会侵权哦
using System; using System.Collections.Generic; using System.Data; using System.Text; using System.Text.RegularExpressions;
/// <summary> ///Deserializejson 的摘要说明 /// </summary> public class Deserializejson { protected DataSet ds = new DataSet();
public Deserializejson() {
// //TODO: 在此处添加构造函数逻辑 // }
public DataSet GetDeserializeJson(string strJson)
{
strJson = strJson.Replace("{", "").Replace("}", "").Replace("[", "").Replace("]", "");
// 去除多余字符
string [] groupdata = strJson.Split('\'');
// 对表分组
/// 获取dataset名称
if (groupdata.Length > 0) { ds.DataSetName = groupdata[0].ToString().Replace("\"","").Replace(":",""); }
/// 生成数据表
for (int i = 1; i < groupdata.Length; i++)
{
GetTableInfo(ds, groupdata[i].ToString());
}
return ds;
}
protected void GetTableInfo(DataSet ds, string strjson)
{
DataTable dt = new DataTable();
Match mcolumns = Regex.Match(strjson, "Columns");
Columns Match mrow = Regex.Match(strjson, "Rows"); //
rows if(strjson == null && strjson == "" && strjson.Length > 0)
{
return;
}
/// 创建数据表
dt.TableName = strjson.Substring(0, strjson.IndexOf(":")).Replace("\"",""); // 取出表名称
/// 创建表结构
CreateDataColumn(dt, strjson.Substring(mcolumns.Index + 9, (mrow.Index - mcolumns.Index) - 11));
// 导入Column数据
/// 填充数据内容
CreateDataRow(dt, strjson.Substring(mrow.Index + 7, strjson.Length - mrow.Index - 11));
// 导入row数据
ds.Tables.Add(dt);
}
/// 创建列
protected void CreateDataColumn(DataTable dt, string strjson)
{
string [] columndata = strjson.Split(',');
foreach (string type in columndata)
{
DataColumn column = new DataColumn();
column.ColumnName = type.Substring(0, type.IndexOf(':')).Replace(":", "").Replace("\"", "");
GetcolumnType(type.Substring(type.IndexOf(':')).Replace(":", "").Replace("\"", ""), column);
dt.Columns.Add(column);
}
}
/// 创建行内容 protected void CreateDataRow(DataTable dt, string strjson) {
string[] rowsdata = strjson.Split(',');
int count = 0; // 统计表列数
for (int j = 0; j < (rowsdata.Length) / dt.Columns.Count; j++ )
{
DataRow row = dt.NewRow();
for (int i = 0; i < dt.Columns.Count; i++) // 判断共有行数
{
SetRows( row, i, dt.Columns[i].DataType.ToString(), rowsdata[count].Substring(rowsdata[count].IndexOf(':') + 1).Replace("\"", "") );
count++;
}
dt.Rows.Add(row);
}
}
/// <summary>
/// 获取数据类型
/// </summary>
/// <param name="type"></param>
/// <param name="column"></param>
protected void GetcolumnType(string type, DataColumn column)
{
switch (type)
{
case "Int32":
column.DataType = typeof(int);
break;
case "DateTime":
column.DataType = typeof(DateTime);
break;
case "Single":
column.DataType = typeof(float);
break;
case "Double": column.DataType = typeof(double);
break;
default: column.DataType = typeof(string);
break;
}
}
/// <summary>
/// 设置datarow内容
/// </summary>
/// <param name="type"></param>
/// <param name="column"></param>
protected void SetRows(DataRow dr, int count, string type, string data)
{
switch (type.Remove(0, 7))
{
case "Int32":
dr[count] = Utils.IsNumeric(data)? Convert.ToInt32(data): 0 ;
break;
case "DateTime":
dr[count] = Utils.IsDate(data) ? Convert.ToDateTime(data) : DateTime.Now; break;
case "Single":
dr[count] = Utils.IsNumeric(data) ? Convert.ToSingle (data) : 0.0;
break;
case "Double":
dr[count] = Utils.IsNumeric(data) ? Convert.ToDouble(data) : 0.0;
break;
default: dr[count] = Convert.ToString(data);
break;
}
}
}
小弟刚刚接触这些东西,有很多东西都不懂,我对CreateDataColumn(dt,strjson.Substring(mcolumns.Index + 9, (mrow.Index - mcolumns.Index) - 11));CreateDataRow(dt, strjson.Substring(mrow.Index + 7, strjson.Length - mrow.Index - 11)); 这里的substring的两个参数搞不懂?为什么要这样?我要做一个抽象适用于所有的Json该怎么做?希望有人可以给我解释一下!!谢谢了