DataTable IList 與 Json 互轉
#region Json轉DataTable
public static DataTable Json2Dtb(string json)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = jss.Deserialize<ArrayList>(json);
DataTable dtb = new DataTable();
if (dic.Count > 0)
{
foreach (Dictionary<string, object> drow in dic)
{
if (dtb.Columns.Count == 0)
{
foreach (string key in drow.Keys)
{
dtb.Columns.Add(key, drow[key].GetType());
}
}
DataRow row = dtb.NewRow();
foreach (string key in drow.Keys)
{
row[key] = drow[key];
}
dtb.Rows.Add(row);
}
}
return dtb;
}
#endregion
#region DataTable轉Json
public static string Dtb2Json(DataTable dtb)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = new ArrayList();
foreach (DataRow row in dtb.Rows)
{
Dictionary<string, object> drow = new Dictionary<string, object>();
foreach (DataColumn col in dtb.Columns)
{
drow.Add(col.ColumnName, row[col.ColumnName]);
}
dic.Add(drow);
}
return jss.Serialize(dic);
}
#endregion
#region 對象轉Json
/// <summary>
/// 對象轉Json
/// </summary>
/// <param name="IL">實體類列表</param>
/// <param name="path">程序集,命名空間</param>
/// <param name="className">類名</param>
/// <returns></returns>
public static string Ilist2Json(IList<object> IL,string path,string className)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = new ArrayList();
if (IL.Count > 0)
{
for (int i = 0; i < IL.Count; i++)
{
Dictionary<string, object> drow = new Dictionary<string, object>();
//Model bj = Activator.CreateInstance<Model>();
Type type = Assembly.Load(path).CreateInstance(className).GetType();//bj.GetType();
PropertyInfo[] pis = type.GetProperties();
for (int j = 0; j < pis.Length; j++)
{
drow.Add(pis[j].Name.ToString(), pis[j].GetValue(IL[i], null));
}
dic.Add(drow);
}
}
return jss.Serialize(dic);
}
#endregion
#region Json轉實體類
public static IList<object> Json2Model(string json,string path,string className)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = jss.Deserialize<ArrayList>(json);
IList<object> iL = new List<object>();
if (dic.Count > 0)
{
foreach (Dictionary<string, object> drow in dic)
{
object model = new object();
model = Assembly.Load(path).CreateInstance(className);
Type type = model.GetType();//bj.GetType();
PropertyInfo[] pis = type.GetProperties();
for (int j = 0; j < pis.Length; j++)
{
object val;
string strType = pis[j].PropertyType.ToString();
switch (strType)//根據類型設置屬性值
{
case "System.String":
val=drow[pis[j].Name].ToString();
break;
case "System.Int32":
val = Int32.Parse(drow[pis[j].Name].ToString());
break;
default:
val=drow[pis[j].Name].ToString();
break;
}
pis[j].SetValue(model, val);
}
iL.Add(model);
}
}
return iL;
}
#endregion
[WebMethod]
public static string geDataTableByAjax3(string str)
{
IList<object> iL = new List<object>();
for (int i = 0; i < 5; i++)
{
Model model = new Model();
model.ID = i.ToString();
model.Name = "JSON" + i.ToString();
model.Address = "中國-北京-海淀" + i.ToString() + "號";
iL.Add(model);
}
string path = "WebApplication1";
string className = path + ".Model";
string strss = Ilist2Json(iL,path,className).ToString();
Json2Model(strss, path, className);//將json轉實體類列表
return strss.ToString();
}
//下面方案二是用Newtonsoft.Json更簡單
/// <summary>
/// DataTable轉換爲json字符串
/// </summary>
/// <param name="dtb">DataTable</param>
/// <returns></returns>
public static string DataTableToJson2(DataTable dtb)
{
try
{
string strss = JsonConvert.SerializeObject(dtb);
DataTable dt = JsonConvert.DeserializeObject<DataTable>(strss);
return strss;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 對象轉Json
/// </summary>
/// <param name="IL">實體類列表</param>
/// <returns></returns>
public static string ListModelToJson<T>(IList<T> IL)//使用泛型
{
try
{
string strss = JsonConvert.SerializeObject(IL);
return strss;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// Json轉DataTable
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static DataTable JsonToDataTable2(string json)
{
try
{
DataTable dt = JsonConvert.DeserializeObject<DataTable>(json);
return dt;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// json轉實體類列表
/// </summary>
/// <param name="json">前臺json字符串</param>
/// <param name="path">程序集,命名空間</param>
/// <param name="className">類名</param>
/// <returns></returns>
public static IList<T> JsonToListModel<T>(string json)//使用泛型傳遞實際的實體類,返回實體類列表
{
try
{
IList<T> iL = JsonConvert.DeserializeObject<IList<T>>(json);
return iL;
}
catch (Exception ex)
{
throw ex;
}
}