日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

json 字符串反序列化成DataSet

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 json 字符串反序列化成DataSet 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

轉載于:https://www.cnblogs.com/doubleyong/archive/2011/11/10/2244640.html

總結

以上是生活随笔為你收集整理的json 字符串反序列化成DataSet的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。