DataTable 转成 json 格式

别闹cc 2016-01-14 11:18:15
表结构如下:

id CusName PreValue AddTime
1 气象局 178.17 2015-10-15 07:29:00
2 陕西警官职业学院 169.63 2015-10-15 07:29:00
3 气象局 182.08 2015-10-15 07:30:00
4 陕西警官职业学院 171.88 2015-10-15 07:30:00


C#取到 返回 DataTable值,现在想得到如下json结构:

{
"气象局": [
{ "PreValue":"178.17" , "AddTime":"2015-10-15 07:29:00" },
{ "PreValue":"182.08" , "lastName":"2015-10-15 07:30:00" }
],
"陕西警官职业学院": [
{ "PreValue":"169.63" , "AddTime":"2015-10-15 07:29:00" },
{ "PreValue":"171.88" , "lastName":"2015-10-15 07:30:00" }
]
}

数据库数据量比较大 ,大概现在有300多万个样子,取出一万条!。。
...全文
371 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
爛轲 2016-01-20
  • 打赏
  • 举报
回复
写一个方法,参考如下: #region dataTable转换成Json格式 /// <summary> /// dataTable转换成Json格式 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string DataTable2Json(DataTable dt) { StringBuilder jsonBuilder = new StringBuilder(); jsonBuilder.Append("{\""); jsonBuilder.Append(dt.TableName.ToString()); jsonBuilder.Append("\":["); for (int i = 0; i < dt.Rows.Count; i++) { jsonBuilder.Append("{"); for (int j = 0; j < dt.Columns.Count; j++) { jsonBuilder.Append("\""); jsonBuilder.Append(dt.Columns[j].ColumnName); jsonBuilder.Append("\":\""); jsonBuilder.Append(dt.Rows[i][j].ToString()); jsonBuilder.Append("\","); } jsonBuilder.Remove(jsonBuilder.Length - 1, 1); jsonBuilder.Append("},"); } jsonBuilder.Remove(jsonBuilder.Length - 1, 1); jsonBuilder.Append("]"); jsonBuilder.Append("}"); return jsonBuilder.ToString(); }
qzyf1992 2016-01-15
  • 打赏
  • 举报
回复
NewSortJSON.NET
myhope88 2016-01-15
  • 打赏
  • 举报
回复
对,序列化一下就行了,或者使用json转化类
  • 打赏
  • 举报
回复
搜索下NewtonSoft.Json 应该这样的公共类挺多的
把分全给哥 2016-01-14
  • 打赏
  • 举报
回复
操作DataTable
别闹cc 2016-01-14
  • 打赏
  • 举报
回复
引用 4 楼 starfd 的回复:
DataTable先GroupBy,然后再进行序列化
DataTable dt = new DataTable();
var query = (from r in dt.AsEnumerable()
                group r by r.Field<string>("CusName") into g
                select g).ToDictionary(
            g => g.Key,
            g => g.Select(x => new
            {
                PreValue = x["PreValue"].ToString(),
                AddTime = x.Field<DateTime>("AddTime").ToString("yyyy-MM-dd HH:mm:ss")
            }
            ));
//序列化
相信你的例子里面LastName是写错了吧,不然怎么实现
恩恩,是的
正怒月神 版主 2016-01-14
  • 打赏
  • 举报
回复
http://www.cnblogs.com/jyshis/archive/2011/09/07/2169452.html
  • 打赏
  • 举报
回复
DataTable先GroupBy,然后再进行序列化
DataTable dt = new DataTable();
var query = (from r in dt.AsEnumerable()
                group r by r.Field<string>("CusName") into g
                select g).ToDictionary(
            g => g.Key,
            g => g.Select(x => new
            {
                PreValue = x["PreValue"].ToString(),
                AddTime = x.Field<DateTime>("AddTime").ToString("yyyy-MM-dd HH:mm:ss")
            }
            ));
//序列化
相信你的例子里面LastName是写错了吧,不然怎么实现
ye.xuan 2016-01-14
  • 打赏
  • 举报
回复
datatable 好像无法实现,dataset 差不多; 但是类似这种需求,一般都是用model 实现: 另外 lz 给出的字符串是 json,没有问题,但是不标准。 推荐一个 json 能转成 model /ben 的地址: http://www.atool.org/json2javabean.php
renyiqiu 2016-01-14
  • 打赏
  • 举报
回复
写个类,然后读取数据库,循环 new 对象,赋相应值,结构那里其实 CusName 也放在中括号里面就行了,反正也算是一个字段值
老李家的小二 2016-01-14
  • 打赏
  • 举报
回复
4楼
Sq-Zyz123 2016-01-14
  • 打赏
  • 举报
回复
循环直接字符串拼接呢?

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧