標籤:
最近開發的項目中需要實現.NET和Android程式做介面,實現Android調用.NET服務!
中間以什麼類型的資料進行傳輸呢,因為Android擅長於JSON類型解析,所以最終決定資料轉送格式為JSON,
下面是將對象,集合,等轉換為JSON字串的協助類!
1.首先添加程式集引用
System.Web.Extensions
System.Runtime.Serialization
2.引入命名空間
using System.Runtime.Serialization.Json;
using System.Web.Script.Serialization;
3.將以下代碼拷貝到一個建立類裡面,建立類名叫JsonHelper
/// <summary> /// JSON協助類。用於將對象轉換為Json格式的字串,或者將Json的字串轉化為對象。 /// </summary> public static class JsonHelper { /// <summary> /// 將對象轉化為Json字串 /// </summary> /// <typeparam name="T">源類型</typeparam> /// <param name="obj">源類型執行個體</param> /// <returns>Json字串</returns> public static string GetJsonFromObj<T>(T obj) { DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType()); using (MemoryStream ms = new MemoryStream()) { jsonSerializer.WriteObject(ms, obj); return Encoding.UTF8.GetString(ms.ToArray()); } } /// <summary> /// 將Json字串轉化為對象 /// </summary> /// <typeparam name="T">目標類型</typeparam> /// <param name="strJson">Json字串</param> /// <returns>目標類型的一個執行個體</returns> public static T GetObjFromJson<T>(string strJson) { T obj = Activator.CreateInstance<T>(); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson))) { DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(obj.GetType()); return (T)jsonSerializer.ReadObject(ms); } } /// <summary> /// 將DataTable轉換為JSON字串 /// </summary> /// <param name="dt">資料表</param> /// <returns>JSON字串</returns> public static string GetJsonFromDataTable(DataTable dt) { StringBuilder JsonString = new StringBuilder(); if (dt != null && dt.Rows.Count > 0) { JsonString.Append("{ "); JsonString.Append("\"TableInfo\":[ "); for (int i = 0; i < dt.Rows.Count; i++) { JsonString.Append("{ "); for (int j = 0; j < dt.Columns.Count; j++) { if (j < dt.Columns.Count - 1) { JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\","); } else if (j == dt.Columns.Count - 1) { JsonString.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + "\"" + dt.Rows[i][j].ToString() + "\""); } } if (i == dt.Rows.Count - 1) { JsonString.Append("} "); } else { JsonString.Append("}, "); } } JsonString.Append("]}"); return JsonString.ToString(); } else { return null; } } /// <summary> /// 將對象轉化為Json字串 /// </summary> /// <param name="obj">來源物件</param> /// <returns>json資料</returns> public static string ObjToJson(this object obj) { JavaScriptSerializer serialize = new JavaScriptSerializer(); return serialize.Serialize(obj); } /// <summary> /// 將Json字串轉化為對象 /// </summary> /// <param name="strJson">Json字串</param> /// <returns>目標對象</returns> public static T JsonToObj<T>(string strJson) { JavaScriptSerializer serialize = new JavaScriptSerializer(); return serialize.Deserialize<T>(strJson); } /// <summary> /// 將對象轉化為Json字串(控制深度 ) /// </summary> /// <param name="obj">來源物件</param> /// <param name="recursionDepth">深度</param> /// <returns>json資料</returns> public static string ObjToJson(this object obj, int recursionDepth) { JavaScriptSerializer serialize = new JavaScriptSerializer(); serialize.RecursionLimit = recursionDepth; return serialize.Serialize(obj); } /// <summary> /// 將Json字串轉化為對象(控制深度 ) /// </summary> /// <param name="strJson">Json字串</param> /// <param name="recursionDepth">深度</param> /// <returns>目標對象</returns> public static T JsonToObj<T>(string strJson, int recursionDepth) { JavaScriptSerializer serialize = new JavaScriptSerializer(); serialize.RecursionLimit = recursionDepth; return serialize.Deserialize<T>(strJson); } /// <summary> /// 將DataTable轉換為JSON字串 /// </summary> /// <param name="dt">DataTable</param> /// <returns>json資料</returns> public static string DataTableToJson(DataTable dt) { Dictionary<string, object> dic = new Dictionary<string, object>(); int index = 0; foreach (DataRow dr in dt.Rows) { Dictionary<string, object> result = new Dictionary<string, object>(); foreach (DataColumn dc in dt.Columns) { result.Add(dc.ColumnName, dr[dc].ToString()); } dic.Add(index.ToString(), result); index++; } return ObjToJson(dic); } }
Json序列化協助類