//table的数据源转换成json格式的字符串
function getRseData() {
var JsonData = {
Conmun: "", OldConmun: "", NewConmun: ""
}
var aa = [];
var rows = document.getElementById("playlistTable").rows.length;
//获得行数(包括thead)
var colums = document.getElementById("playlistTable").rows[0].cells.length;
//获得列数
for (var i = 0; i < rows - 1; i++) {
var JsonData = new Object();
for (var j = 0; j < colums; j++) {
var id = $("#playlistTable tr:gt(0):eq(" + i + ") td:eq(" + j + ") input")[0].id;
var namenew = $("#" + id + "").val();
if (id.match("Old")) {
JsonData.OldConmun = namenew;
} else if (id.match("New")) {
JsonData.NewConmun = namenew;
} else {
JsonData.Conmun = namenew
}
}
aa.push(JsonData);
}
var obj = JSON.stringify(aa);
$.ajax({
type: 'POST',
async: false,
cache: false,
url: "/Sys_ParameterSet/JsonToDataTable",
data: "strJson=" + obj,
dataType: "json",
success: function (data) {
}
});
}
#region 将 Json 解析成 DateTable
/// <summary>
/// 将 Json 解析成 DateTable。
/// Json 数据格式如:
/// {table:[{column1:1,column2:2,column3:3},{column1:1,column2:2,column3:3}]}
/// </summary>
/// <param name="strJson">要解析的 Json 字符串</param>
/// MainCustomDt 全部变量
DataTable MainCustomDt =new DataTable ()
public void JsonToDataTable(string strJson)
{
// 取出表名
var rg = new Regex(@"(?<={)[^:]+(?=:\[)", RegexOptions.IgnoreCase);
string strName = rg.Match(strJson).Value;
DataTable tb = null;
//数据为空返回
if (strJson.Trim().Length == 0)
{
MainCustomDt = tb;
}
try
{
// 去除表名
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(':');
dc.ColumnName = strCell[0].Replace("\"", "");
tb.Columns.Add(dc);
}
tb.AcceptChanges();
}
// 增加内容
DataRow dr = tb.NewRow();
for (int j = 0; j < strRows.Length; j++)
{
dr[j] = strRows[j].Split(':')[1].Replace("\"", "");
}
tb.Rows.Add(dr);
tb.AcceptChanges();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
MainCustomDt = tb;
}
#endregion
第二种方式
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
namespace Common
{
public class JsonToDataTable
{
/// <summary>
/// Json 字符串 转换为 DataTable数据集合,(当Qconvert中的json字符串转换成datatable数据集失败时,可用这个方法)
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static DataTable JsonToDataTableTwo(string json)
{
DataTable dataTable = new DataTable(); //实例化
DataTable result;
try
{
JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
javaScriptSerializer.MaxJsonLength = Int32.MaxValue; //取得最大数值
ArrayList arrayList = javaScriptSerializer.Deserialize<ArrayList>(json);
if (arrayList.Count > 0)
{
foreach (Dictionary<string, object> dictionary in arrayList)
{
if (dictionary.Keys.Count<string>() == 0)
{
result = dataTable;
return result;
}
//Columns
if (dataTable.Columns.Count == 0)
{
foreach (string current in dictionary.Keys)
{
dataTable.Columns.Add(current, dictionary[current].GetType());
}
}
//Rows
DataRow dataRow = dataTable.NewRow();
foreach (string current in dictionary.Keys)
{
dataRow[current] = dictionary[current];
}
dataTable.Rows.Add(dataRow); //循环添加行到DataTable中
}
}
}
catch
{
}
result = dataTable;
return result;
}
}
}