C# DataSet转JSON
经常会遇到系统数据交互采用JSON数据格式进行交互的,避免不必要的重复工作,记录下自己的处理方式。
获取数据集之后,通过函数对数据集信息进行整理通过.Net Framework3.5提出的JavaScriptSerializer类进行DataSet数据的序列化,
需要添加System.Web.Extensions引用:
private static string DataToJson(DataSet metaData,string msg)
{
DataTable resultInfo = new DataTable("success");
resultInfo.Columns.Add("RETURN_CODE", Type.GetType("System.String"));
resultInfo.Columns.Add("ERROR_MSG", Type.GetType("System.String"));
DataRow newRow = resultInfo.NewRow();
if (metaData == null || metaData.Tables.Count <= || metaData.Tables[].Rows.Count <= )
{
newRow["RETURN_CODE"] = "-1";
if (string.IsNullOrEmpty(msg))
{
newRow["ERROR_MSG"] = "查询结果为空";
}
else
{
newRow["ERROR_MSG"] = msg;
}
resultInfo.Rows.Add(newRow);
metaData.Tables.Add(resultInfo);
}
else
{
newRow["RETURN_CODE"] = "";
newRow["ERROR_MSG"] = "";
resultInfo.Rows.Add(newRow);
metaData.Tables.Add(resultInfo);
}
StringBuilder sb = new StringBuilder();
sb.Append("{");
JavaScriptSerializer serializer = new JavaScriptSerializer();
foreach (DataTable dt in metaData.Tables)
{
sb.Append(string.Format("\"{0}\":",dt.TableName));
ArrayList arrayList=new ArrayList();
foreach (DataRow dataRow in dt.Rows)
{
Dictionary<string, object> dictionary = new Dictionary<string, object>();
foreach (DataColumn dataColumn in dt.Columns)
{
dictionary.Add(dataColumn.ColumnName,dataRow[dataColumn.ColumnName]);
}
arrayList.Add(dictionary);
}
sb.Append(serializer.Serialize(arrayList));
sb.Append(",");
}
return sb.Remove(sb.Length - , ).Append("}").ToString();
}
此时我们获取了一个JSON格式的字符串,在接收方同样可以通过JavaScriptSerializer将字符串转换为自己需要的数据格式如ArrayList:
private ArrayList JsonToList(string json)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
Dictionary<string,object> dictionary= serializer.Deserialize<Dictionary<string,object>>(json);
return (ArrayList)dictionary["data"];
}
也可以将JSON转换为对象:
internal bool ValidateWebJsonValues(ref UserInfo userInfo, string userName, string passWord)
{
try
{
string json = "{"data":{"accounts":null,"delFlag":"","email":null,"emailState":null,"instOrgId":null,"institue":false,"member":false,"mobile":null,"org":false,"realName":"包文强","state":"","teacher":true,"userId":121438653944262,"userType":""},"success":true}"; JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
Dictionary<string, object> dic = jsSerializer.Deserialize<Dictionary<string, object>>(json);
bool dataResult = (bool)dic["success"];
if (dataResult)
{
Dictionary<string, object> dataDic = (Dictionary<string, object>)dic["data"];
Type type = typeof(UserInfo);
PropertyInfo[] propInfo = type.GetProperties();
foreach (PropertyInfo prop in propInfo)
{
if (dataDic[prop.Name] != null)
{
prop.SetValue(userInfo, dataDic[prop.Name], null);
}
else
{
prop.SetValue(userInfo, "", null);
}
}
}
return dataResult;
}
catch (Exception ex)
{
return false;
}
}
以上代码是根据个人过往处理这方面问题的代码进行简单调整,也涉及到一些判断逻辑。作为参考,可以修改调整后使用。
C# DataSet转JSON的更多相关文章
- Asp.net 将DataTable 或者DataSet 转换为Json 格式
Web 开发中,将从数据库中取到的数据直接转换为 Json 格式的数据,在前台通过Ajax 无刷新显示在界面上,下面提供将DataTable 或者DataSet 转换为Json 的方法 /// < ...
- DataSet转Json 方法
防止忘记,留着备用 /// <summary> /// DATASET转JSON /// </summary> /// <param name="ds" ...
- c# DataSet转换为Json
/// <summary> /// DataSet转换为Json /// </summary> /// <param name="dataSet"&g ...
- Datatable/Dataset 转 JSON方法
当数据库表的数据在一般处理程序中查出来需要将这个表数据返回到前台的jquery中,需要将数据拼成json字符串形式,这里是将数据库数据查出放在Datatable中,然后在一般处理程序中将datatab ...
- .NET-DataTable或DataSet转JSON
通过AJAX异步减少网络内容传输,而JSON则可以把传输内容缩减到纯数据:然后利用jQuery内置的AJAX功能直接获得JSON格式的数据:在客户端直接绑定到数据控件里面,从而达到最优. #regio ...
- .NET DataTable DataSet转json代码
/// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...
- LINQ返回DataTable类型 list转dataset 转换为JSON对象
using System.Web.Script.Serialization; using System.Collections.Generic; using System.Reflection; us ...
- Delphi中DataSet和JSON的互转
//1)数据集转换为JSON字符串://需USES System.JSON; function DataSetToJson(ADataset: TDataSet): string; // [{&quo ...
- DataSet与JSON互转
DataSetConverter4Delphi https://github.com/ezequieljuliano/DataSetConverter4Delphi ----------------- ...
随机推荐
- 通过METAMASK调试和发布智能合约指南(转载)
2017-12-07 芯链团队 小明微思考 原文地址:https://mp.weixin.qq.com/s?__biz=MzA4Mzk2MzUzNg==&mid=2651223347& ...
- GUI学习之n——自定义信号
PyQt中是依靠信号——槽的机制来运行,可是有些时候需要我们定义一下些新的信号以满足使用要求,例如按钮是没有右击的效果,那我们怎么创建一个新的信号呢? 首先要注意,新的信号是要以类属性的形式来定义 c ...
- SQL查询优化的步骤
一.定位慢查询 SQL优化的一般步骤:先查询mysql数据库运行状况,然后定位慢查询,再分析sql的执行过程,然后进行优化 1.使用show status查询数据库的运行状况 //显示数据库运行状态 ...
- Spring Boot 2.x整合mybatis及druid数据源及逆向工程
1逆向工程 1)db.properties #============================# #===== Database sttings =====# #=============== ...
- 【leetcode】827. Making A Large Island
题目如下: 解题思路:这个题目可以进行拆分成几个子问题.第一,求出island的数量,其实就是 200. Number of Islands,这个很简单,DFS或者BFS都能搞定:第二,除了求出isl ...
- js设置定时器在规定的日期内替换掉页面
<script type="text/javascript"> window.onload=function(){ var myspan=document.getEle ...
- SQL 查询表字段长度, 名称, 类型, 存储过程创建和修改时间
获取存储过程的修改时间和创建时间查询建立时间 --表 select * from sysobjects where id=object_id(N'表名') and xtype='U' --表的结构 s ...
- luogu P1037 产生数 x
P1037 产生数 题目描述 给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15). 规则: 一位数可变换成另一个一位数: 规则的右部不能为零. 例如:n=234.有规则( ...
- Oulipo【Hash】
Oulipo Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 45515 Accepted: 18181 Descript ...
- ionic框架+angular开发项目
ionic框架组件地址:https://ionicframework.com/docs/api/tab ionic文档地址:https://ionicframework.com/docs/angula ...