using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
namespace NingQHai.Tools
{
/// <summary>
/// Json操作类
/// </summary>
public partial class Utils
{
/// <summary>
/// 将数据表转换成JSON类型串
/// </summary>
/// <param name="dt">要转换的数据表</param>
/// <returns></returns>
public static StringBuilder DataTableToJson(System.Data.DataTable dt)
{
return DataTableToJson(dt, true);
}
/// <summary>
/// 将数据表转换成JSON类型串
/// </summary>
/// <param name="dt">要转换的数据表</param>
/// <param name="dt_dispose">数据表转换结束后是否dispose掉</param>
/// <returns></returns>
public static StringBuilder DataTableToJson(System.Data.DataTable dt, bool dt_dispose)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("[/r/n");
//数据表字段名和类型数组
string[] dt_field = new string[dt.Columns.Count];
int i = 0;
string formatStr = "{{";
string fieldtype = "";
foreach (System.Data.DataColumn dc in dt.Columns) {
dt_field[i] = dc.Caption.ToLower().Trim();
formatStr += "'" + dc.Caption.ToLower().Trim() + "':";
fieldtype = dc.DataType.ToString().Trim().ToLower();
if (fieldtype.IndexOf("int") > 0 || fieldtype.IndexOf("deci") > 0 ||
fieldtype.IndexOf("floa") > 0 || fieldtype.IndexOf("doub") > 0 ||
fieldtype.IndexOf("bool") > 0) {
formatStr += "{" + i + "}";
}
else {
formatStr += "'{" + i + "}'";
}
formatStr += ",";
i++;
}
if (formatStr.EndsWith(",")) {
formatStr = formatStr.Substring(0, formatStr.Length - 1);//去掉尾部","号
}
formatStr += "}},";
i = 0;
object[] objectArray = new object[dt_field.Length];
foreach (System.Data.DataRow dr in dt.Rows) {
foreach (string fieldname in dt_field) { //对 / , ' 符号进行转换
objectArray[i] = dr[dt_field[i]].ToString().Trim().Replace("//", "").Replace("'", "//'");
switch (objectArray[i].ToString()) {
case "True": {
objectArray[i] = "true"; break;
}
case "False": {
objectArray[i] = "false"; break;
}
default: break;
}
i++;
}
i = 0;
stringBuilder.Append(string.Format(formatStr, objectArray));
}
if (stringBuilder.ToString().EndsWith(",")) {
stringBuilder.Remove(stringBuilder.Length - 1, 1);//去掉尾部","号
}
if (dt_dispose) {
dt.Dispose();
}
return stringBuilder.Append("/r/n]");
}
/// <summary>
/// Json特符字符过滤,参见http://www.json.org/
/// </summary>
/// <param name="sourceStr">要过滤的源字符串</param>
/// <returns>返回过滤的字符串</returns>
public static string JsonCharFilter(string sourceStr)
{
sourceStr = sourceStr.Replace("//", "");
sourceStr = sourceStr.Replace("/b", "///b");
sourceStr = sourceStr.Replace("/t", "///t");
sourceStr = sourceStr.Replace("/n", "///n");
sourceStr = sourceStr.Replace("/n", "///n");
sourceStr = sourceStr.Replace("/f", "///f");
sourceStr = sourceStr.Replace("/r", "///r");
return sourceStr.Replace("/"", "///"");
}
/// <summary>
/// 将集合对像转换成Json字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonName"></param>
/// <param name="IL"></param>
/// <returns></returns>
public static string ObjectToJson<T>(string jsonName, IList<T> IL)
{
StringBuilder Json = new StringBuilder();
Json.Append("{/"" + jsonName + "/":[");
if (IL.Count > 0) {
for (int i = 0; i < IL.Count; i++) {
T obj = Activator.CreateInstance<T>();
Type type = obj.GetType();
PropertyInfo[] pis = type.GetProperties();
Json.Append("{");
for (int j = 0; j < pis.Length; j++) {
Json.Append("/"" + pis[j].Name.ToString() + "/":/"" + pis[j].GetValue(IL[i], null) + "/"");
if (j < pis.Length - 1) {
Json.Append(",");
}
}
Json.Append("}");
if (i < IL.Count - 1) {
Json.Append(",");
}
}
}
Json.Append("]}");
return Json.ToString();
}
}
}