欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-26 08:37:01
在web开发中,我们可能会有这样的需求,为了便于前台的js的处理,我们需要将查询出的数据源格式比如:list、datatable转换为json格式。特别在...

在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; 
}

效果图:

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

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的方法汇总(三种方法),希望对大家有所帮助