MVC4:ajax Json 应用
1)Json基础
2)Json 字符串和Json对象
3)应用例子
4)JsonHelper
1)Json 基础
JSON中对象通过"{}"来标识,一个"{}"代表一个对象,如{"AreaId":"123"},
对象的值是键值对的形式(key:value)。
"[]",标识数组,数组内部各个数据之间通过","分割,如["AreaId":"123","AreaId":"345"]。
很多情况下是对象数组,那就是这样: [{"AreaId":"123"},{"AreaId":"345"}]
数组也是一个对象: {"Area":[{"AreaId":"123"},{"AreaId":"345"}]} 这表示一个Area对象,
他有两个子数据,每个子数据也是一个对象,每个子对象都是AreaId。
2)Json字符串和Json对象
json字符串:Var strJSON = "{"Area":[{"AreaId":"123"},{"AreaId":"345"}]}",
其实也可以写成这样:Var strJSON = ‘{"Area":[{"AreaId":"123"},{"AreaId":"345"}]}',
这表示一个JSON字符串,由于在Js中单引号和双引号都可以表示一个字符串,所以上面第一个使用双引号和第二个使用单引号的都表示一个JSON字符串。
字符串的时候就要用eval转化成jquery对象,代码如下:
var arr = '{"red":{"id":1,"name":"mary"},"blue":{"id":2,"name":"u71d5u5b50"}}'; var dataObj = eval("("+arr+")");//转换Json对象 $.each(dataObj,function(idx,item){ //输出 alert(item.id+"哈哈"+item.name); })
Json对象:Var JSON = {"Area":[{"AreaId":"123"},{"AreaId":"345"}]},JSON对象最外面是没有单引号或者双引号的,这就表示一个JSON对象。
Json对象不需要转化,代码如下:
var arr = {"red":{"id":1,"name":"mary"},"blue":{"id":2,"name":"u71d5u5b50"}}; $.each(arr,function(idx,item){ //输出 alert(item.id+"哈哈"+item.name); })
3)应用例子
前台JS:将传递过来的数据直接解析为json数据,也就是说这里的前台js代码可能直接把这些数据解析成json对象数据,而并非字符串数据,
如data[0].demoData,这里就直接使用了这个json对象数据。
$.ajax({ type: "post", url: "Default.aspx", dataType: "json", success: function (data) { alert(data[0].demoData); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); } });后台代码:
<span style="white-space: pre;"> </span>Response.Clear(); Response.Write("[{"demoData":"This Is The JSON Data"}]"); Response.Flush(); Response.End();
4)JsonHelper应用
//JsonHelper.cs
public class UserClass { public string Name { set; get; } public string sex { set; get; } }
//应用
public string MyAjax2(string val1) { var strJSON = "[{\"name\":\"name1\",\"sex\":\"man\" },{\"name\":\"name2\",\"sex\":\"woman\" }]"; List<UserClass> list = DeserializeUserList(strJSON); foreach (var item in list) { var name=item.name;
<span style="white-space:pre"> </span> var sex=item.sex; } return "ok"; }
//直接将Json转化为实体对象 public List<UserClass> DeserializeUserList(string json) { var u = JsonHelper.JSONToObject<List<UserClass>>(json); return u; }
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Script.Serialization; using System.Data; namespace MvcAspxMovie.Models { /// <summary> /// JSON帮助类 /// </summary> public class JsonHelper { /// <summary> /// 对象转JSON /// </summary> /// <param name="obj">对象</param> /// <returns>JSON格式的字符串</returns> public static string ObjectToJSON(object obj) { JavaScriptSerializer jss =new JavaScriptSerializer(); try { return jss.Serialize(obj); } catch(Exception ex) { throw new Exception("JSONHelper.ObjectToJSON(): "+ ex.Message); } } /// <summary> /// 数据表转键值对集合 www.2cto.com /// 把DataTable转成 List集合, 存每一行 /// 集合中放的是键值对字典,存每一列 /// </summary> /// <param name="dt">数据表</param> /// <returns>哈希表数组</returns> public static List<Dictionary<string,object>>DataTableToList(DataTable dt) { List<Dictionary<string,object>> list =new List<Dictionary<string,object>>(); foreach(DataRow dr in dt.Rows) { Dictionary<string,object> dic =new Dictionary<string,object>(); foreach(DataColumn dc in dt.Columns) { dic.Add(dc.ColumnName, dr[dc.ColumnName]); } list.Add(dic); } return list; } /// <summary> /// 数据集转键值对数组字典 /// </summary> /// <param name="dataSet">数据集</param> /// <returns>键值对数组字典</returns> public static Dictionary<string,List<Dictionary<string,object>>>DataSetToDic(DataSet ds) { Dictionary<string,List<Dictionary<string,object>>> result =new Dictionary<string,List<Dictionary<string,object>>>(); foreach(DataTable dt in ds.Tables) result.Add(dt.TableName,DataTableToList(dt)); return result; } /// <summary> /// 数据表转JSON /// </summary> /// <param name="dataTable">数据表</param> /// <returns>JSON字符串</returns> public static string DataTableToJSON(DataTable dt) { return ObjectToJSON(DataTableToList(dt)); } /// <summary> /// JSON文本转对象,泛型方法 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="jsonText">JSON文本</param> /// <returns>指定类型的对象</returns> public static T JSONToObject<T>(string jsonText) { JavaScriptSerializer jss =new JavaScriptSerializer(); try { return jss.Deserialize<T>(jsonText); } catch(Exception ex) { throw new Exception("JSONHelper.JSONToObject(): "+ ex.Message); } } /// <summary> /// 将JSON文本转换为数据表数据 /// </summary> /// <param name="jsonText">JSON文本</param> /// <returns>数据表字典</returns> public static Dictionary<string,List<Dictionary<string,object>>>TablesDataFromJSON(string jsonText) { return JSONToObject<Dictionary<string,List<Dictionary<string,object>>>>(jsonText); } /// <summary> /// 将JSON文本转换成数据行 /// </summary> /// <param name="jsonText">JSON文本</param> /// <returns>数据行的字典</returns> public static Dictionary<string,object>DataRowFromJSON(string jsonText) { return JSONToObject<Dictionary<string,object>>(jsonText); } } }