经常会遇到系统数据交互采用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的更多相关文章

  1. Asp.net 将DataTable 或者DataSet 转换为Json 格式

    Web 开发中,将从数据库中取到的数据直接转换为 Json 格式的数据,在前台通过Ajax 无刷新显示在界面上,下面提供将DataTable 或者DataSet 转换为Json 的方法 /// < ...

  2. DataSet转Json 方法

    防止忘记,留着备用 /// <summary> /// DATASET转JSON /// </summary> /// <param name="ds" ...

  3. c# DataSet转换为Json

    /// <summary> /// DataSet转换为Json /// </summary> /// <param name="dataSet"&g ...

  4. Datatable/Dataset 转 JSON方法

    当数据库表的数据在一般处理程序中查出来需要将这个表数据返回到前台的jquery中,需要将数据拼成json字符串形式,这里是将数据库数据查出放在Datatable中,然后在一般处理程序中将datatab ...

  5. .NET-DataTable或DataSet转JSON

    通过AJAX异步减少网络内容传输,而JSON则可以把传输内容缩减到纯数据:然后利用jQuery内置的AJAX功能直接获得JSON格式的数据:在客户端直接绑定到数据控件里面,从而达到最优. #regio ...

  6. .NET DataTable DataSet转json代码

    /// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"> ...

  7. LINQ返回DataTable类型 list转dataset 转换为JSON对象

    using System.Web.Script.Serialization; using System.Collections.Generic; using System.Reflection; us ...

  8. Delphi中DataSet和JSON的互转

    //1)数据集转换为JSON字符串://需USES System.JSON; function DataSetToJson(ADataset: TDataSet): string; // [{&quo ...

  9. DataSet与JSON互转

    DataSetConverter4Delphi https://github.com/ezequieljuliano/DataSetConverter4Delphi ----------------- ...

随机推荐

  1. bzoj4383 [POI2015]Pustynia 拓扑排序+差分约束+线段树优化建图

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4383 题解 暴力的做法显然是把所有的条件拆分以后暴力建一条有向边表示小于关系. 因为不存在零环 ...

  2. DevExpress v18.2版本亮点——Analytics Dashboard篇(一)

    行业领先的.NET界面控件——DevExpress v18.2版本亮点详解,本文将介绍了DevExpress Analytics Dashboard v18.2 的版本亮点,新版30天免费试用!点击下 ...

  3. postman实现Base64加密

    1.新建一个Collection 2.新建一个request 3.新增一个环境变量(全局变量也可以) 4.在variable中填入需要加密的变量名称,比如password 5.在body中填好参数,需 ...

  4. shiro常见的异常以及处理方法

    1.shiro的常见异常 1.1  AuthenticationException 异常是Shiro在登录认证过程中,认证失败需要抛出的异常. AuthenticationException包含以下子 ...

  5. 微信小程序细节部分

    微信小程序和HTML区别: 1.开发工具不同,H5的开发工具+浏览器Device Mode预览,小程序的开发基于自己的开发者工具 2.开发语言不同,小程序自己开发了一套WXML标签语言和WXSS样式语 ...

  6. mysql FOREIGN KEY约束 语法

    mysql FOREIGN KEY约束 语法 作用:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY. DD马达 说明:FOREIGN KEY 约束用于预防破坏表之间连接的 ...

  7. 牛客网 珂学送分( 期望DP )

    题意 : 题目链接 分析 : 听队友说一般概率从前往后推.期望从后往前推......... #include<bits/stdc++.h> using namespace std; ; d ...

  8. 【bzoj2073】【[POI2004]PRZ】位运算枚举子集的特技

    (上不了p站我要死了) Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一 ...

  9. 【bzoj3343】教主的魔法

    *题目描述: 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始 ...

  10. 【BZOJ1563】诗人小G(决策单调性DP)

    题意:给定N,L,P,求f[N] sum[i]递增,L<=3e6,P<=10 思路:四边形不等式的证明见https://www.byvoid.com/zhs/blog/noi-2009-p ...