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

ASP.NET MVC 网站开发总结(六)——简谈Json的序列化与反序列化的更多相关文章

  1. ASP.NET MVC 网站开发总结(三) ——图片截图上传

    本着简洁直接,我们就直奔主题吧,这里需要使用到一个网页在线截图插件imgareaselect(请自行下载). 前台页面: <!DOCTYPE html> <html> < ...

  2. ASP.NET MVC 网站开发总结(四)——校友平台开发总结

    又历经一个多月的努力,学校的一个校友平台项目也接近内测的尾声了,简单的总结一下这次的项目开发. 与上次做Wing工作室的门户网站相比,同样是团队开发,参与的人员多了一个,用的时间也差不多一个月,但从总 ...

  3. ASP.NET MVC 网站开发总结(一)

    历经一个多月的努力,工作室的门户网站(http://www.wingstudio.org)终于结束了内部公测. 仔细算一下,大概把网站开发出1.0版本大概用了一个月的时间(主要是利用课余时间),其后大 ...

  4. ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码

    首先提出一个问题:在做网站开发的时候,用到了验证码来防止恶意提交表单,那么要如何实现当验证码错误时,只是刷新一下验证码,而其它填写的信息不改变? 先说一下为什么有这个需求:以提交注册信息页面为例,一般 ...

  5. ASP.NET MVC 网站开发总结(七)——C#操作图片:多张图的拼接(旋转)

    其实用C#来操作图片的拼接就是在用Graphic画图.个人感觉还是挺有趣的,各种类库提供了丰富多彩的功能. 源代码(移植到一个简单的C#程序中,并没有放在ASP.NET项目中): using Syst ...

  6. ASP.NET MVC 网站开发总结(二)——一个或多个文件的异步或同步上传

    简而言之,直接用代码展示如何实现文件的上传,这里需要使用到一个bootstrap的文件上传插件File Input(请自行下载). 前台页面: <!----> <!DOCTYPE h ...

  7. ASP.NET MVC5 网站开发实践(一) - 项目框架

    前几天算是开题了,关于怎么做自己想了很多,但毕竟没做过项目既不知道这些想法有无必要,也不知道能不能实现,不过邓爷爷说过"摸着石头过河"吧.这段时间看了一些博主的文章收获很大,特别是 ...

  8. ASP.NET MVC5 网站开发实践(一) - 项目框架(转)

    前几天算是开题了,关于怎么做自己想了很多,但毕竟没做过项目既不知道这些想法有无必要,也不知道能不能实现,不过邓爷爷说过“摸着石头过河”吧.这段时间看了一些博主的文章收获很大,特别是@kencery,依 ...

  9. ASP.NET MVC企业开发的基本环境

    ASP.NET MVC企业开发的基本环境[资源服务器概念] 学完了ASP.NET MVC4 IN ACTION 六波以后 企业开发演习 标签:AaronYang  茗洋  EasyUI1.3.4   ...

随机推荐

  1. Javascript模块化编程笔记

    最近在读阮一峰的博客http://www.ruanyifeng.com/blog/2012/10/javascript_module.html,随手记录一些重要笔记.  Javascript模块的雏形 ...

  2. Redis的使用模式之计数器模式实例

    转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/123.html?1455853785 Redis 是目前 NoSQL 领域 ...

  3. [JavaWeb]关于DBUtils中QueryRunner的一些解读.

    前言:[本文属于原创分享文章, 转载请注明出处, 谢谢.]前面已经有文章说了DBUtils的一些特性, 这里再来详细说下QueryRunner的一些内部实现, 写的有错误的地方还恳请大家指出. Que ...

  4. 转【】浅谈sql中的in与not in,exists与not exists的区别_

    浅谈sql中的in与not in,exists与not exists的区别   1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...

  5. cordova 版本

    cordova 版本 npm install cordova@xxxx https://travis-ci.org/apache/cordova-cli https://www.npmjs.com/p ...

  6. php的几种运行模式CLI、CGI、FastCGI、mod_php

    1.CLI:就是命令行,例如可以在控制台或者是shell中键入命令: php -f index.php 然后获取输出 2.CGI:以下是不同的说法与理解 公共网关接口”(Common Gateway  ...

  7. 移动web开发之移动端真机测试

    × 目录 [1]特性 [2]安装 [3]设置[4]移动端 前面的话 chrome的开发者工具可以很好地做好模拟工作,但毕竟模拟和实际还是有差别的.所以,真机测试是一定要做的,如何高效地进行真机测试呢. ...

  8. 本机搭建zookeeper集群

    3个 clientPort分别设置为2181,2182,2083 server.1=127.0.0.1:2888:3888 server.2=127.0.0.2:2889:3889 server.3= ...

  9. [c++] Associative Containers

    关联容器 和 顺序容器 的本质差别在于: 关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素. Reference: http://www.cnblogs.c ...

  10. spring 源码分析之BeanPostProcessor

    1.官方解答: Factory hook that allows for custom modification of new bean instances, e.g. checking for ma ...