1.直接使用JsonConvert.SerializeObject()。将datatable放入 输出字符串
下面是测试:用webform+ashx作为接口。
public class GetJson : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/json";
var str = DataTableToJsonWithJsonNet(GetDt());
context.Response.Write(str);
//context.Response.Write(GetDt());
}
#region 构造datatable
public static DataTable GetDt()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Columns.Add("Age");
dt.Columns.Add("Birth");
dt.Rows.Add(1,"张三",22,"1993-12-4");
dt.Rows.Add(1, "李四", 23, "1992-12-4");
dt.Rows.Add(1, "王五", 21, "1996-12-4");
dt.Rows.Add(1, "赵六", 23, "1997-12-4");
dt.Rows.Add(1, "马七", 20, "1991-12-4");
return dt;
}
#endregion
#region 根据datatable返回json
public static string DataTableToJsonWithJsonNet(DataTable table)
{
string jsonString = string.Empty;
jsonString = JsonConvert.SerializeObject(table);
return jsonString;
}
#endregion
public bool IsReusable
{
get
{
return false;
}
}
}
经过测试输出到前台的最终是一个数组。
2.datatable拼接到对象中,再返回
同样情况下,假如我们不转换为json字符串,直接使用datatable输出到前台,经过测试前台什么都接收不到。
假如想把datatable作为一个数组拼接到一个对象中在返回前台,此时应该用JObject和Jarry。
public class GetJson : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/json";
var str = DataTableToJsonWithJsonNet(GetDt());
context.Response.Write(str);
}
#region 构造datatable
public static DataTable GetDt()
{
DataTable dt = new DataTable();
dt.Columns.Add("ID");
dt.Columns.Add("Name");
dt.Columns.Add("Age");
dt.Columns.Add("Birth");
dt.Rows.Add(1,"张三",22,"1993-12-4");
dt.Rows.Add(1, "李四", 23, "1992-12-4");
dt.Rows.Add(1, "王五", 21, "1996-12-4");
dt.Rows.Add(1, "赵六", 23, "1997-12-4");
dt.Rows.Add(1, "马七", 20, "1991-12-4");
return dt;
}
#endregion
#region 根据datatable返回json
public static JObject DataTableToJsonWithJsonNet(DataTable table)
{
JObject job;
JArray jar = JArray.FromObject(GetDt());
job = new JObject { {"code",0 },{ "msg","查询成功"},{ "state",true},{ "data",jar} };
return job;
}
#endregion
public bool IsReusable
{
get
{
return false;
}
}
}
可以看到前台接收到对象了
3.假如后台是一个list,返回方法一样,只需要将JArry.formobject();
传入的对象改为list就可以