之前并没有系统地学习Json,以至于做项目中一直想着在Controller中写个Json串传给前台用,结果大家可能想到了,都是错误。其实想想我为什么会出现这样的错误,归根结底还是不了解Json是什么。JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。
1.Json的两种结构
JSON有两种表示结构,对象和数组。
对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如代码。
{
key1:value1,
key2:value2,
...
}
其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组。
数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如代码。
[
{
key1:value1,
key2:value2
},
{
key3:value3,
key4:value4
}
]
2.Json字符串和Json对象
json字符串:指的是符合json格式要求的js字符串。例如:var jsonStr = "{StudentID:'100',Name:'tmac',Hometown:'usa'}";
json对象:指符合json格式要求的js对象。例如:var jsonObj = { StudentID: "100", Name: "tmac", Hometown: "usa" };
3.以一个实例说明Json在JS中的应用
先给大家展示一段代码:
var tree = {
/**
* 所有的初始化的操作
*/
pFunction: {
zTree: '',
setting:
{
callback: {
onClick: zTreeOnClick
},
check: {
enable: false,
chkboxType: { "Y": "", "N": "" }
},
data:
{
key:
{
name: "ResourceName"
},
simpleData:
{
enable: true,
idKey:"ResourceId",
pIdKey: "PId",
rootPId:"0"
}
}
},
//加载资源
loadTree: function () {
$.post("/ResourceFront/getAllResource", null, function (resourceInfo) {
$.fn.zTree.init($("#tree"), tree.pFunction.setting, resourceInfo);
});
}
}
};
这整段代码就是一个Json对象tree,在tree对象中又包含一个key值:pFunction。pFunction这个key值对应的又是一个Json对象(这说明JSON对象中可以在嵌套JSON对象)。而。这个JSON对象又包含三个key值:zTree、setting和loadTree。zTree对应的是一个空串。setting对应的又是一个JSON对象,这个JSON对象又包含三个KeyValue值,loadTree这个key值对应的是一个Function对象。我想通过读这一段代码,可以很好地理解JSON了。记着半年前,看到这段代码还很苦恼,不知道这到底是什么东西。4.在.NET中如何使用Json
我们前后台进行交互时通过JSON串,后台的对象通过序列化转为JSON串传给前台,前台可以很方便地通过Js处理。比如以上面的代码为例读取loadTree对应的函数:tree.pFunction.loadTree();而前台传给后台的JSON串需要反序列为对象给后台使用。Newtonsoft.Json.JsonConvert类是非微软提供的一个JSON序列化和反序列的开源免费的类库(下载网址是:http://www.codeplex.com/json/),它提供了更灵活的序列化和反序列化控制。
publicstaticvoid JsonConvertDemo()
{
User user =new User { UserId =1, UserName ="李刚", CreateDate = DateTime.Now.AddYears(-30), Birthday = DateTime.Now.AddYears(-50), Priority = Priority.BelowNormal, Salary =5000 };
//JsonConvert类在Newtonsoft.Json.Net35.dll中,注意到http://www.codeplex.com/json/下载这个dll并添加这个引用
//JSON序列化
string result = JsonConvert.SerializeObject(user);
Console.WriteLine("使用JsonConvert序列化后的结果:{0},长度:{1}", result, result.Length);
//JSON反序列化
user = JsonConvert.DeserializeObject<User>(result);
Console.WriteLine("使用JsonConvert反序列化后的结果:UserId:{0},UserName: {1},CreateDate:{2},Priority:{3}", user.UserId, user.UserName, user.CreateDate, user.Priority);
}
总结:JSON是JavaScript对象的一种表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。在项目中应用很广泛,是一项基本功,需要牢固掌握。