json 字符串反序列化成DataSet
在CSDN上下載的代碼,放到文章里,是為了保存以后用,希望不會侵權(quán)哦
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: 在此處添加構(gòu)造函數(shù)邏輯
//
}
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(":","");
}
/// 生成數(shù)據(jù)表
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;
}
/// 創(chuàng)建數(shù)據(jù)表
dt.TableName = strjson.Substring(0, strjson.IndexOf(":")).Replace("\"",""); // 取出表名稱
/// 創(chuàng)建表結(jié)構(gòu)
CreateDataColumn(dt, strjson.Substring(mcolumns.Index + 9, (mrow.Index - mcolumns.Index) - 11)); // 導(dǎo)入Column數(shù)據(jù)
/// 填充數(shù)據(jù)內(nèi)容
CreateDataRow(dt, strjson.Substring(mrow.Index + 7, strjson.Length - mrow.Index - 11)); // 導(dǎo)入row數(shù)據(jù)
ds.Tables.Add(dt);
}
/// 創(chuàng)建列
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);
}
}
/// 創(chuàng)建行內(nèi)容
protected void CreateDataRow(DataTable dt, string strjson)
{
string[] rowsdata = strjson.Split(',');
int count = 0; // 統(tǒng)計(jì)表列數(shù)
for (int j = 0; j < (rowsdata.Length) / dt.Columns.Count; j++ )
{
DataRow row = dt.NewRow();
for (int i = 0; i < dt.Columns.Count; i++) // 判斷共有行數(shù)
{
SetRows(
row, i, dt.Columns[i].DataType.ToString(), rowsdata[count].Substring(rowsdata[count].IndexOf(':') + 1).Replace("\"", "")
);
count++;
}
dt.Rows.Add(row);
}
}
/// <summary>
/// 獲取數(shù)據(jù)類型
/// </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>
/// 設(shè)置datarow內(nèi)容
/// </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;
}
}
}
轉(zhuǎn)載于:https://www.cnblogs.com/doubleyong/archive/2011/11/10/2244640.html
總結(jié)
以上是生活随笔為你收集整理的json 字符串反序列化成DataSet的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: String path = reques
- 下一篇: shell执行的特殊变数