经常会遇到系统数据交互采用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. "Host 'onlyyou-bridal.jp' is blocked because of many connection errors; unblock with 'mysqladminlush-hosts'"

    错误链接数太多 ,清理mysqladminlush-hosts 这个文件 直接 service mysqld restart  解决了~~~ ccess denied for user 'root'@ ...

  2. Linux分屏操作

    需要安装工具tmux (1)安装工具 在ubuntu系统中使用sudo apt-get install tmux安装tmux工具 (2)使用工具 1,输入命令tmux使用工具 2,上下分屏:ctrl ...

  3. BZOJ 4026: dC Loves Number Theory 可持久化线段树 + 欧拉函数 + 数学

    Code: #include <bits/stdc++.h> #define ll long long #define maxn 50207 #define setIO(s) freope ...

  4. [UVA160]Factors and Factorials 题解

    前言 这道题目本身毫无技术含量珂言,但是输出格式珂以调一年 题解 这道题让我们求\(N!\)中每个质数的个数. 一种方法是直接模拟,枚举\(N!\)中的每个元素,然后暴力查看每个数含有有多少质数. 但 ...

  5. 2014ACM-ICPC广州站题解(摘自闭幕式)

    第39届ACM-ICPC亚洲区广州站题解 Ltysky摘抄自闭幕式题目分析 Problem A 满足px+qy=c的点(x,y)在一条直线上,而c的值由直线的截距确定,所以最大化c,就要在糖果(x,y ...

  6. 170826-关于spring的知识点及练习

    1.Spring作用: 1.生态体系庞大,全能型选手![springmvc是其一个子模块,jdbcTemplate能直接操作数据库!] 2.将其他组件粘合在一起 3.IOC容器和AOP[Aspect ...

  7. es之分词器和分析器

    Elasticsearch这种全文搜索引擎,会用某种算法对建立的文档进行分析,从文档中提取出有效信息(Token) 对于es来说,有内置的分析器(Analyzer)和分词器(Tokenizer) 1: ...

  8. win10文件夹不自动刷新的解决方案

    win10文件夹不自动刷新的解决方案 https://jingyan.baidu.com/article/d7130635d45a5013fcf47544.html

  9. Linux shell -查找字符(find,xargs,grep)

    在当前目录下查找含有jmxremote字符的文件 test@>find . -type f|xargs grep "jmxremote" . 当前目录 -type 查找文件类 ...

  10. GitHub最著名的20个Python机器学习项目

    GitHub最著名的20个Python机器学习项目 我们分析了GitHub上的前20名Python机器学习项目,发现scikit-Learn,PyLearn2和NuPic是贡献最积极的项目.让我们一起 ...