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;
        }
    }
View Code

    后台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));
        }
    }
}
View Code

  前台一个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("数据加载失败,请刷新页面重试!");
        }
    });
}
View Code

   这个例子是前台请求数据,在后台序列化,前台反序列化,当然也可以前台发送数据,在前台先将要传递的数据序列化为Json数据,在后台才来反序列化。

   

 此次知识分享就到这,敬请期待下一次的分享。^_^

<我的博客主页>:http://www.cnblogs.com/forcheng/

<Wing工作室主页>:http://www.wingstudio.org/

原文地址:https://www.cnblogs.com/forcheng/p/5594973.html