DataTable dt=JsonConvert.DeserializeObject<DataTable>(SaveJsonStr); 不好之处。。会导致数据丢失。。因为 类型都根据第一行进行判断的
示例1: 存在缺陷 有些特殊字符时,或者行的字段数不一致时,会导致报错
#region 将json转换为DataTable
/// <summary>
/// 将json转换为DataTable
/// </summary>
/// <param name="strJson"></param>
/// <returns></returns>
private static 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;