using System; using System.Collections.Generic; using System.Linq; using System.Web; using WeiSha.Common; using Song.ServiceInterfaces; using Song.Extend; using System.Data; using System.Text; namespace Song.Site.Ajax { /// /// 我的学习记录 /// public class SelfStudyLog : IHttpHandler { //学员id int stid = WeiSha.Common.Request.QueryString["id"].Int32 ?? 0; public void ProcessRequest(HttpContext context) { DataTable dt = Business.Do().StudentStudyCourseLog(stid); string json = DataTableToJson(dt); context.Response.Write(json); } public string DataTableToJson(DataTable table) { if (table == null) return string.Empty; 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++) { Type t = table.Columns[j].DataType; //属性名(包括泛型名称) var nullableType = Nullable.GetUnderlyingType(t); string typename = nullableType != null ? nullableType.Name : t.Name; //返回当前属性的值 string val=_to_property(typename, table.Rows[i][j]); JsonString.Append("\"" + table.Columns[j].ColumnName.ToString() + "\":" + "\"" + val + "\""); JsonString.Append(j < table.Columns.Count - 1 ? "," : ""); } JsonString.Append(i == table.Rows.Count - 1 ? "}" : "},"); } JsonString.Append("]"); } return JsonString.ToString(); } /// /// 为json输出字段 /// /// 字段的类型名称 /// 字段的值 /// private string _to_property(string typename, object value) { string str = ""; //根据不同类型输出 switch (typename) { case "DateTime": System.DateTime time = System.DateTime.Now; if (value != null) time = Convert.ToDateTime(value); System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 long timeStamp = (long)(time - startTime).TotalMilliseconds; // 相差毫秒数 //将C#时间转换成JS时间字符串 string JSstring = string.Format("eval('new ' + eval('/Date({0})/').source)", timeStamp); str = JSstring; break; case "String": str = value == null ? "" : value.ToString(); str = HttpUtility.UrlEncode(str).Replace("+", "%20"); break; case "Boolean": str = value.ToString().ToLower(); break; default: str = value == null ? "" : value.ToString(); break; } return str; } public bool IsReusable { get { return false; } } } }