//根据 DataSet 产生提供给报表需要的JSON文本数据 public static string GenDetailText(DataSet ds) { System.ServiceModel.Dispatcher.JsonQueryStringConverter jqsc = new System.ServiceModel.Dispatcher.JsonQueryStringConverter(); StringBuilder sbJSONText = new StringBuilder("{\n"); foreach (DataTable dt in ds.Tables) { //"recordset":[ sbJSONText.Append('"'); sbJSONText.Append(dt.TableName); sbJSONText.Append("\":[\n"); foreach (DataRow dr in dt.Rows) { sbJSONText.Append('{'); for (int i = 0; i < dt.Columns.Count; ++i) { if (!dr.IsNull(i)) { //string Value; //if (dt.Columns[i].DataType.IsArray) //{ // Value = Convert.ToBase64String((byte[])dr[i]); //} //else //{ // Value = dr[i].ToString(); // PrepareValueText(ref Value); //} //sbJSONText.AppendFormat("\"{0}\":\"{1}\",", dt.Columns[i].ColumnName, Value); //用 ConvertValueToString 转换,这样数字类型才不会加引号 //如果日期类型也用ConvertValueToString转换,则为 "\/Date(-152438400000+0800)\/" 这样的形式 string Value; if (dt.Columns[i].DataType.IsArray) { Value = "\"" + Convert.ToBase64String((byte[])dr[i]) + "\""; } else if (dt.Columns[i].DataType == typeof(System.DateTime)) { Value = "\"" + dr[i].ToString() + "\""; } else { Value = jqsc.ConvertValueToString(dr[i], dt.Columns[i].DataType); } sbJSONText.AppendFormat("\"{0}\":{1},", dt.Columns[i].ColumnName, Value); } } sbJSONText.Remove(sbJSONText.Length - 1, 1); //去掉每笔记录最后一个字段后面的"," sbJSONText.Append("},\n"); } sbJSONText.Remove(sbJSONText.Length - 2, 1); //去掉最后一条记录后面的"," sbJSONText.Append("],\n"); } sbJSONText.Remove(sbJSONText.Length - 2, 1); //去掉最后一记录集后面的"," sbJSONText.Append("}"); return(sbJSONText.ToString()); }
public void Setup () { c = new JsonQueryStringConverter (); }