using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Script.Serialization;
namespace Web
{
public static class Tools
{
//***********************************************************Json實體類互轉 Start//***********************************************************
/// <summary>
/// 將任意對象序列化爲JSON格式
/// </summary>
/// <param name="o">對象</param>
/// <returns>json字符串</returns>
public static string SerializeObject(object o)
{
try
{
string json = JsonConvert.SerializeObject(o);
return json;
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 解析JSON字符串生成對象實體
/// </summary>
/// <typeparam name="T">對象類型</typeparam>
/// <param name="json">json字符串(eg.{"ID":"112","Name":"石子兒"})</param>
/// <returns>對象實體</returns>
public static T DeserializeJsonToObject<T>(string json) where T : class
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(T));
T t = o as T;
return t;
}
/// <summary>
/// 解析JSON數組生成對象實體集合
/// </summary>
/// <typeparam name="T">對象類型</typeparam>
/// <param name="json">json數組字符串(eg.[{"ID":"112","Name":"石子兒"}])</param>
/// <returns>對象實體集合</returns>
public static List<T> DeserializeJsonToList<T>(string json) where T : class
{
JsonSerializer serializer = new JsonSerializer();
StringReader sr = new StringReader(json);
object o = serializer.Deserialize(new JsonTextReader(sr), typeof(List<T>));
List<T> list = o as List<T>;
return list;
}
/// <summary>
/// 反序列化JSON到給定的匿名對象.
/// </summary>
/// <typeparam name="T">匿名對象類型</typeparam>
/// <param name="json">json字符串</param>
/// <param name="anonymousTypeObject">匿名對象</param>
/// <returns>匿名對象</returns>
public static T DeserializeAnonymousType<T>(string json, T anonymousTypeObject)
{
T t = JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
return t;
}
//***********************************************************Json實體類互轉 End//***********************************************************
//***********************************************************DataTable Json互轉 Start//***********************************************************
/// <summary>
/// 將DataTable轉爲實體類集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dt"></param>
/// <returns></returns>
public static IList<T> DateTableconvertToList<T>(DataTable dt) where T : new()
{
// 定義集合
List<T> ts = new List<T>();
// 獲得此模型的類型
Type type = typeof(T);
//定義一個臨時變量
string tempName = string.Empty;
//遍歷DataTable中所有的數據行
foreach (DataRow dr in dt.Rows)
{
T t = new T();
// 獲得此模型的公共屬性
PropertyInfo[] propertys = t.GetType().GetProperties();
//遍歷該對象的所有屬性
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name;//將屬性名稱賦值給臨時變量
//檢查DataTable是否包含此列(列名==對象的屬性名)
if (dt.Columns.Contains(tempName))
{
// 判斷此屬性是否有Setter
if (!pi.CanWrite) continue;//該屬性不可寫,直接跳出
//取值
object value = dr[tempName];
//如果非空,則賦給對象的屬性
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
//對象添加到泛型集合中
ts.Add(t);
}
return ts;
}
/// <summary>
/// 將datatable轉換爲json
/// </summary>
/// <param name="dtb">Dt</param>
/// <returns>JSON字符串</returns>
public static string Dtb2Json(DataTable dtb)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
System.Collections.ArrayList dic = new System.Collections.ArrayList();
foreach (DataRow dr in dtb.Rows)
{
System.Collections.Generic.Dictionary<string, object> drow = new System.Collections.Generic.Dictionary<string, object>();
foreach (DataColumn dc in dtb.Columns)
{
drow.Add(dc.ColumnName, dr[dc.ColumnName]);
}
dic.Add(drow);
}
//序列化
return jss.Serialize(dic);
}
/// <summary>
///將實體類集合轉爲Json數據
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="Model_List"></param>
/// <returns></returns>
public static string List2Json<T>(List<T> Model_List) where T : new()
{
try
{
JsonSerializer serializer = new JsonSerializer();
StringWriter sw = new StringWriter();
serializer.Serialize(new JsonTextWriter(sw), Model_List);
return sw.GetStringBuilder().ToString();
}
catch (Exception)
{
throw;
}
}
//***********************************************************DataTable Json互轉 End//***********************************************************
}
}
原文地址: