在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相关推荐

  1. C#将Json字符串反序列化成List对象类集合

    usingSystem.IO; usingSystem.Web.Script.Serialization; usingSystem.Runtime.Serialization.Json; //工具类 ...

  2. oracle json字符串转数组,json字符串转化成json对象(原生方法)

    json字符串.json对象.数组 三者之间的转换 //json字符串.json对象.数组 三者之间的转换 let jsonStr = '[{"id":"01" ...

  3. JSON字符串封装成Bean对象/JSON串反序列化成实体类对象/JSON字符串转换成Java对象

    文章目录 使用阿里巴巴的 JSON 使用 ObjectMapper JSON字段与实体类属性不一致 首先,我们建立一个实体类,这里简单定义了 name.sex.age 三个属性,以及 get.set. ...

  4. 判断一个字符串是否是JSON字符串的坑

    开篇(扯点闲话) 提起JSON,想必大家脑海里能浮现出几个常用的JSON框架吧 : Jackson : Jackson是一个开源的基于Java的json解析和处理类库,它可以轻松的将Java对象转换成 ...

  5. 十分钟搞懂JSON(JSON对象---JSON字符串---对象 之间的区别)

    好记性不如烂笔头,相信我,看了之后你会彻底搞懂JSON 前言:前天被JSON对象,JSON字符串,JAVA对象搞混了,不知道各自代表的意思,我就查了资料,总结为一篇博文. 另外我想List<Us ...

  6. json字符串与对象互相转换

    阿里巴巴fastJson Fastjson是一个Java语言编写的JSON处理器. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一. 2.功能qiang打,支持JDK的各种 ...

  7. json字符串、json对象、数组 三者之间的转换

    json字符串转化成json对象 // jquery的方法 var jsonObj = $.parseJSON(jsonStr) //js 的方法 var jsonObj = JSON.parse(j ...

  8. JSON | JSON字符串和JSON对象的区别

    最近在学习Vue.js,里面有个存储.读取本地缓存的功能,不停地用JSON.parse(),和JSON.stringify()来转换JSON字符串和JSON对象.自己有点晕,不明白两者的区别,看起来感 ...

  9. json字符串和字典类型的相互转换(转载)

    转自:http://www.cnblogs.com/YUTOUYUWEI/p/5585863.html 在开发过程中,有时候需要将json字符串转为字典类型,反之亦然,通常采用.Net的开源类库New ...

最新文章

  1. 第2关:CLA182四位先行进位电路设计
  2. Kafka工作原理简要概述
  3. 网络库urillib3
  4. 读人、看人、做人(图)
  5. 新书上市《软件设计师考试考前冲刺预测卷及考点解析(最新版)》
  6. “我们必须禁止互联网定向广告!”
  7. ElasticSearch 2 (34) - 信息聚合系列之多值排序
  8. mybatis的mysql参数传递_Mybatis参数传递及返回类型
  9. ckplayer ajax,旋风解析
  10. tcp压测工具_掌门全链路灰度压测实战
  11. 电视视频直播在线播放网站PHP源码V1.2
  12. VASP服务器第一次安装各种软件(上)
  13. 圈圈USB开发板 IDE40
  14. 爬取新浪微博(一)Scrapy入门教程
  15. 16 | 把大象装进冰箱:HTTP传输大文件的方法
  16. 《我是科比》—科比在湖人成长记录
  17. 《魔界地牢:异世界战纪》隐私政策
  18. 128. 损益类科目能说出几个?
  19. 2020历年真题全解析【数学一】-汤家凤【上册(1987-1999年)】
  20. MATLAB画图——用数字表示颜色以及删除矩阵行

热门文章

  1. maven 打包时缺少文件_maven父子工程---子模块相互依赖打包时所遇到的问题:依赖的程序包找不到...
  2. python嵩天课后题及答案第二章_课后参考答案-第二章部分习题参考答案
  3. nfc sim android8,Android NFC相关资料之MifareClassic卡(读写)
  4. linux 随机抽取文件,shell 随机从文件中抽取若干行的实现方法
  5. 防火墙阻止网页连接网络连接_win7电脑打不开网页怎么办 win7电脑打不开网页解决步骤【图文步骤】...
  6. HTML+CSS+JS实现 ❤️svg图片透明层文本显示❤️
  7. java date 一个月_java中的日期加一个月的计算
  8. java项目如何单元测试_大家java web项目开发做单元测试吗?
  9. 递归算法1加到100_五种循环方法计算1加到100
  10. C++ 重载左移和右移运算符