当前位置: 移动技术网 > IT编程>开发语言>c# > C#中DataTable 转换为 Json的方法汇总(三种方法)

C#中DataTable 转换为 Json的方法汇总(三种方法)

2019年07月18日  | 移动技术网IT编程  | 我要评论

在web开发中,我们可能会有这样的需求,为了便于前台的js的处理,我们需要将查询出的数据源格式比如:list<t>、datatable转换为json格式。特别在使用extjs框架的时候,ajax异步请求的数据格式就是json。鉴于此,我今天来分享将datatable 转换成 json的3种方法。换句话说如何在asp.net将一个datatable序列化为 json数组。或者如何从一个datatable返回一个json字符串。这篇文章将采用stringbuilder,javascriptserializer和 json.net dll (newtonsoft) 这3种方法实现这一目标。

json概述

javascript object notation (json)是一种轻量级的数据交换格式。它基于ecmascript的一个子集。这些特性使json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。json采用完全独立于语言的文本格式,但是也使用了类似于c语言家族的习惯,包括c、c++、c#、java、javascript、perl、python等等。

这些特性使json成为一种理想的数据交换语言。因此 基于ajax应用程序,json已经成为一种用于数据交换的流行格式。总之,json是一种存储和交换数据的语法,易于操作,也是除xml之外的不二之选。

步骤:

首先我们从microsoft sql server 获取数据到datatable,也可以给datatable动态添加行。代码如下:

private datatable getdata()
{
datatable dt = new datatable();
dt.columns.add("编号", typeof(int32));
dt.columns.add("姓名", typeof(string));
dt.columns.add("性别", typeof(string));
dt.columns.add("学历", typeof(string));
dt.rows.add(1, "王超", "男", "本科");
dt.rows.add(2, "周丽", "女", "专科");
dt.rows.add(3, "李娟", "女", "专科");
dt.rows.add(4, "杨明", "男", "硕士");
dt.rows.add(5, "张德", "男", "本科");
return dt;
}

下面开始通过每一种方法实现datatable转换成 json 对象。

方法1:使用stringbuilder

这是json样本数据的样子: {"姓名 ":"张三", "年龄":"30"}。json里用花括号保存对象,它可以包含多个名称/值对。所以使用stringbuilder我们可以创建一个类似的json字符串。

由于要使用stringbuilder类,我们首先需要导入system.text命名空间,如下:

using system.text;

下面的代码将生成一个json字符串,遍历datatable的行和列,获取数据,添加到一个stringbuilder对象 jsonstring,然后返回这个对象。

public string datatabletojson(datatable table)
{
var jsonstring = new stringbuilder();
if (table.rows.count > 0)
{
jsonstring.append("[");
for (int i = 0; i < table.rows.count; i++)
{
jsonstring.append("{");
for (int j = 0; j < table.columns.count; j++)
{
if (j < table.columns.count - 1)
{
jsonstring.append("\"" + table.columns[j].columnname.tostring() + "\":" + "\"" + table.rows[i][j].tostring() + "\",");
}
else if (j == table.columns.count - 1)
{
jsonstring.append("\"" + table.columns[j].columnname.tostring() + "\":" + "\"" + table.rows[i][j].tostring() + "\"");
}
}
if (i == table.rows.count - 1)
{
jsonstring.append("}");
}
else
{
jsonstring.append("},");
}
}
jsonstring.append("]");
}
return jsonstring.tostring(); 
}

方法2:使用 javascriptserializer.

首先我们添加system.web.script.serialization命名空间,如下:

using system.web.script.serialization;

javascriptserializer这个类是由异步通信层内部使用来序列化和反序列化数据。如果序列化一个对象,就使用序列化方法。反序列化json字符串,使用deserialize或deserializeobject方法。在这里,我们使用序列化方法得到json格式的数据。代码以下:

public string datatabletojsonwithjavascriptserializer(datatable table)
{ 
javascriptserializer jsserializer = new javascriptserializer(); 
list < dictionary < string, object >> parentrow = new list < dictionary < string, object >> (); 
dictionary < string, object > childrow; 
foreach(datarow row in table.rows)
{ 
childrow = new dictionary < string, object > (); 
foreach(datacolumn col in table.columns)
{ 
childrow.add(col.columnname, row[col]); 
} 
parentrow.add(childrow); 
} 
return jsserializer.serialize(parentrow); 
}

方法3:使用json.net dll (newtonsoft)。

这个方法中要添加json.net dll引用,我们可以从newtonsoft下载json.net dll,再导入命名空间,代码如下:

using newtonsoft.json;
public string datatabletojsonwithjsonnet(datatable table)
{ 
string jsonstring=string.empty; 
jsonstring = jsonconvert.serializeobject(table); 
return jsonstring; 
}

效果图:

stringbuilder方法的全部代码:

using system;
using susing system.data;
public partial class default2 : system.web.ui.page
private string sasss;

protected void page_load(object sender, eventargs e)
{
datatable table = getdata();
sasss = datatabletojson(table);

response.write(sasss + "<br/>");

}
public string datatabletojson(datatable table)
{
var jsonstring = new stringbuilder();
if (table.rows.count > 0)
{
jsonstring.append("[");
for (int i = 0; i < table.rows.count; i++)
{
jsonstring.append("{");
for (int j = 0; j < table.columns.count; j++)
{
if (j < table.columns.count - 1)
{
jsonstring.append("\"" + table.columns[j].columnname.tostring() + "\":" + "\"" + table.rows[i][j].tostring() + "\",");
}
else if (j == table.columns.count - 1)
{
jsonstring.append("\"" + table.columns[j].columnname.tostring() + "\":" + "\"" + table.rows[i][j].tostring() + "\"");
}
}
if (i == table.rows.count - 1)
{
jsonstring.append("}");
}
else
{
jsonstring.append("},");
}
}
jsonstring.append("]");
}
return jsonstring.tostring(); 
}

private datatable getdata()
{
datatable dt = new datatable();
dt.columns.add("编号", typeof(int32));
dt.columns.add("姓名", typeof(string));
dt.columns.add("性别", typeof(string));
dt.columns.add("学历", typeof(string));
dt.rows.add(1, "王超", "男", "本科");
dt.rows.add(2, "周丽", "女", "专科");
dt.rows.add(3, "李娟", "女", "专科");
dt.rows.add(4, "杨明", "男", "硕士");
dt.rows.add(5, "张德", "男", "本科");
return dt;
}
}

以上所述是小编给大家介绍的c#中datatable 转换为 json的方法汇总(三种方法),希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网