读书人

内循环的循环方法

发布时间: 2013-03-06 16:20:31 作者: rapoo

求一个内循环的循环方法
现有的循环:


for (int i = 0; i < dt.Rows.Count; i++)
{
string username = dt.Rows[i]["UserName"].ToString();
string u = "{'options':\"[{'names':'" + dt.Rows[i]["UserName"].ToString() + "','username':'" + dt.Rows[i]["UserName"].ToString() + "'}]\"}";
Context.Response.Write(u);
}


现在得出的结果是:
{'options':"[{'names':'陈先生','username':'陈先生'}]"}{'options':"[{'names':'严建军','username':'严建军'}]"}


我想要得出的结果是:
{'options':"[{'names':'陈先生','username':'陈先生'},{'names':'严建军','username':'严建军'}]"}


这个循环应该怎么写?
[解决办法]
这个需求可以用序列化来完成
将DataTable序列化为Json格式

当然也可以像LZ那样手动写代码完成json的序列化
可以把datatable的每一行放进一个list或者string[]中,
用逗号直接拼接输出就可以了
[解决办法]
改成这样:

string u = "{'options':\"[";
for (int i = 0; i < dt.Rows.Count; i++)
{
string username = dt.Rows[i]["UserName"].ToString();
u += "{'names':'" + dt.Rows[i]["UserName"].ToString() + "','username':'" + dt.Rows[i]["UserName"].ToString() + "'}";
}
u += "]\"}
Context.Response.Write(u);

[解决办法]

var sb = new StringBuilder("{\"options\":[");
for (int i = 0; i < dt.Rows.Count; i++)
{
sb.AppendFormat("{\"names\":\"{0}\", \"username\":\"{0}\"}", dt.Rows[i]["UserName"].ToString().Replace("\\", "\\\\"").Replace("\"", "\\\""));
}
sb.Append("]}");
Context.Response.Write(sb.ToString());

还是用序列化吧,有些字符是需要转义的,否则会破坏数据的格式
[解决办法]
var sb = new StringBuilder("{\"options\":[");
for (int i = 0; i < dt.Rows.Count; i++)
{
sb.AppendFormat("{\"names\":\"{0}\", \"username\":\"{0}\"},", dt.Rows[i]["UserName"].ToString().Replace("\\", "\\\\"").Replace("\"", "\\\""));
}
sb.TrimEnd(',');
sb.Append("]}");
Context.Response.Write(sb.ToString());
[解决办法]
引用:
郁闷,如果有两条以上记录的话,最后}处会多一个“,”无法去除。

有两个办法,一个是用string.Join()拼接数组,这样最后就没有多余的分割符了,另一个就是循环的时候判断下,如果是最后一个,就不输出分隔符。

读书人网 >asp.net

热点推荐