日期:2014-05-17  浏览次数:20426 次

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


            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()拼接数组,这样最后就没有多余的分割符了,另一个就是循环的时候判断下,如果是最后一个,就不输出分隔符。