using Infragistics.Win.UltraWinGrid;
using System.Data;
using System.Text;
namespace Core.StlMes.Client.Judge.Commons
{
public class JsonHelper
{
public static string ToJson(DataTable dt)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("[");
for (int i = 0; i < dt.Rows.Count; i++)
{
jsonBuilder.Append("{");
for (int j = 0; j < dt.Columns.Count; j++)
{
jsonBuilder.Append("'");
jsonBuilder.Append(dt.Columns[j].ColumnName);
jsonBuilder.Append("':'");
jsonBuilder.Append(escape(dt.Rows[i][j].ToString()));
jsonBuilder.Append("',");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("},");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]");
return jsonBuilder.ToString();
}
public static string ToJson(DataRow dr)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("{");
for (int j = 0; j < dr.Table.Columns.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(dr.Table.Columns[j].ColumnName);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(escape(dr[j].ToString()));
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("}");
return jsonBuilder.ToString();
}
public static string ToJson(UltraGridRow row)
{
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("{");
for (int j = 0; j < row.Cells.Count; j++)
{
jsonBuilder.Append("\"");
jsonBuilder.Append(row.Cells[j].Column.Key);
jsonBuilder.Append("\":\"");
jsonBuilder.Append(escape(row.Cells[j].Value.ToString()));
jsonBuilder.Append("\",");
}
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("}");
return jsonBuilder.ToString();
}
///
/// json特殊字符转义
///
/// old json
/// new json
private static string escape(string json)
{
string newJson = "";
if (!string.IsNullOrEmpty(json))
{
newJson = json.Replace("\\", "\\\\").Replace("\r", "\\r").Replace("\n", "\\n").Replace("\"", "\\\"");
}
return newJson;
}
public static DataTable toTable(string json)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(DataTable)) as DataTable;
}
}
}