ASP.NET MVC 网站开发总结(六)——简谈Json的序列化与反序列化
首先,先简单的谈一下什么是序列化与反序列化,序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化(Deserialization)对象的状态,重新创建该对象。
一般我们把Json的序列化与反序列化用在哪些地方呢?对于网站开发来说,一般我们会用Json来进行前台和后台的数据传递(常与Ajax一起使用),而这个过程就涉及到了Json的序列化与反序列化。
那么我们就来简单看一下Json的序列化与反序列化实例吧:——使用Ajax异步加载用户数据到前台,通过Json传递数据
一个对象:(用户存储用户的一些信息,传输时会序列化为对应的Json数据)
//用户部分信息 public class UserInfo { public string Name { get; set; } public string HeadPortrait { get; set; } public int Grade { get; set; } public string Major { get; set; } public int Class { get; set; } public string Address { get; set; } public UserInfo(string name, string headPortrait, int grade, string major, int userClass, string address) { Name = name; HeadPortrait = headPortrait; Grade = grade; Major = major; Class = userClass; Address = address; } }
后台HomeController里面的一个方法:(使用Json传递数据)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Security; using Test.Models; using System.Text.RegularExpressions; using System.IO; using System.Web.Script.Serialization; namespace Test { public class HomeController : Controller { //entity:Entity Framework数据上下文访问实例 WebAppContext entity = new WebAppContext(); /// <summary> /// 异步获取用户信息 /// </summary> /// <returns></returns> [HttpPost] public ActionResult AjaxGetUserInfos() { var userInfos = new List<UserInfo>(); var users = entity.Users.Where(m => m.Address.Length > 0).OrderBy(m => m.Address); foreach (var user in users) { userInfos.Add(new UserInfo(user.Name, user.HeadPortrait, user.Grade, user.Major, user.Class, user.Address)); } return Json((new JavaScriptSerializer()).Serialize(userInfos)); } } }
前台一个Js方法:(使用Ajax异步加载用户数据到前台)
//使用ajax获取数据 function AjaxGetData() { $.ajax({ url: '/Home/AjaxGetUserInfos', type: 'post', async: true, success: function (data) { var userDatas = eval('(' + data + ')'); var n = userDatas.length; var i = 0; for(i = 0; i < n; i++) { //AddUserInfo:自己第一个的将用户信息添加到页面上的函数,可根据自己的需求重写 AddUserInfo(userDatas[i].Name, userDatas[i].HeadPortrait, userDatas[i].Grade, userDatas[i].Major, userDatas[i].Class, userDatas[i].Address); } }, error: function () { alert("数据加载失败,请刷新页面重试!"); } }); }
这个例子是前台请求数据,在后台序列化,前台反序列化,当然也可以前台发送数据,在前台先将要传递的数据序列化为Json数据,在后台才来反序列化。
此次知识分享就到这,敬请期待下一次的分享。^_^
<我的博客主页>:http://www.cnblogs.com/forcheng/
<Wing工作室主页>:http://www.wingstudio.org/