首先,先简单的谈一下什么是序列化与反序列化,序列化 (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/