大多数情况下,我们不会再Javascript中直接创建JSON字符串。而是,创建一些Javascript对象,这些对象和服务器上的.net对象对应。因此,可以在服务器上创建.net实体类,然后串行化成JSON格式,随后在浏览器中反串行化为Javascript对象。

Album.asmx

<%@ WebService Language="C#" Class="AlbumProxy" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Web.Script.Services;
using System.Net;
using System.Xml.Serialization;
using System.Web.Script.Serialization;
public class Album
{
private string _artist = String.Empty;
private string _title = String.Empty;
private int _releaseYear;
private string[] _tracks = new string[];
private DateTime _dateTime = DateTime.Now;
private string _personalInfo = "do not show this"; [ScriptIgnore]
public string PersonalInfo
{
get
{
return _personalInfo;
}
set
{
_personalInfo = value;
}
} public Album() { } public string Artist
{
get
{
return _artist;
}
set
{
_artist = value;
}
} public string Title
{
get
{
return _title;
}
set
{
_title = value;
}
} public int ReleaseYear
{
get
{
return _releaseYear;
}
set
{
_releaseYear = value;
}
} public string[] Tracks
{
get
{
return _tracks;
}
set
{
_tracks = value;
}
}
} [WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService]
public class AlbumProxy : System.Web.Services.WebService
{
private Album _album; public AlbumProxy()
{
_album = new Album();
_album.Artist = "Phish";
_album.Title = "A Picture of Nectar";
_album.ReleaseYear = ;
_album.Tracks.SetValue("Llama", );
_album.Tracks.SetValue("Eliza", );
_album.Tracks.SetValue("Cavern", );
_album.Tracks.SetValue("Poor Heart", );
_album.Tracks.SetValue("Stash", );
_album.Tracks.SetValue("Manteca", );
_album.Tracks.SetValue("Guelah Papyrus", );
_album.Tracks.SetValue("Magilla", );
_album.Tracks.SetValue("The Landlady", );
_album.Tracks.SetValue("Glide", );
_album.Tracks.SetValue("Tweezer", );
_album.Tracks.SetValue("The Mango Song", );
_album.Tracks.SetValue("Chalk Dust Torture", );
_album.Tracks.SetValue("Faht", );
_album.Tracks.SetValue("Catapult", );
_album.Tracks.SetValue("Tweezer Reprise", );
} [WebMethod]
[XmlInclude(typeof(Album))]
public object GetAlbum() {
return _album;
} [WebMethod]
[XmlInclude(typeof(Album))]
public object GetAlbumJSON()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(_album);
}
}

ScriptProxy.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ScriptProxy.aspx.cs" Inherits="Chap9Project.ScriptProxy" %>
<%@ Import Namespace="System.Web.Script.Serialization" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript">
function pageLoad() {
AlbumProxy.GetAlbumJSON(completionJSON);
AlbumProxy.GetAlbum(completionObject);
} function completionJSON(result) {
alert(result);
var album = Sys.Serialization.JavaScriptSerializer.deserialize(result);
$get('placeholder').innerHTML = album.Artist;
} function completionObject(album) {
alert(album);
$get('placeholder2').innerHTML = album.ReleaseYear;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/Album.asmx" />
</Services>
</asp:ScriptManager>
<div id="placeholder"></div>
<br />
<div id="placeholder2"></div>
</div>
</form>
</body>
</html>

JSON串行化的更多相关文章

  1. Hadoop基础-Protocol Buffers串行化与反串行化

    Hadoop基础-Protocol Buffers串行化与反串行化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过很多种序列化文件格式,比如python中的pickl ...

  2. Hadoop基础-Apache Avro串行化的与反串行化

    Hadoop基础-Apache Avro串行化的与反串行化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Apache Avro简介 1>.Apache Avro的来源 ...

  3. 【Java EE 学习 72 下】【数据采集系统第四天】【移动/复制页分析】【使用串行化技术实现深度复制】

    一.移动.复制页的逻辑实现 移动.复制页的功能是在设计调查页面的时候需要实现的功能.规则是如果在同一个调查中的话就是移动,如果是在不同调查中的就是复制. 无论是移动还是复制,都需要注意一个问题,那就是 ...

  4. PHP面向对象04_串行化

    oop04复习 2014-9-3 10:48:45 要点: --1.克隆对象 --2.__toString( ) --3. __call( ) --4.自动加载类 --5.对象串行化 1.克隆对象以及 ...

  5. 【PHP面向对象(OOP)编程入门教程】22.把对象串行化serialize()方法,__sleep()方法,__wakeup()方法

    有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,等到达另一端时,再还原为原来的对象,这个过程称之为串行化(也叫序列化), 就像我们现在想把一辆汽车通过轮船运到美国去,因为 ...

  6. VC++ chap13 文档与串行化

    Lesson 13 文档与串行化 13.1使用CArchive类对文件进行读写操作 //让对象数据持久性的过程称之为串行化,或者序列化 void CGraphicView::OnFileWrite() ...

  7. Java 对象的串行化(Serialization)

    1.什么是串行化 对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把对象的这种能记录自己的状态以便将来再生的能力.叫作对象的持续性(pe ...

  8. 【性能诊断】四、单功能场景的性能分析(RedGate,找到同一个客户端的并发请求被串行化问题)

    问题描述: 客户端js连续发起两个异步http请求,请求地址相同,但参数不同:POST http://*.*.*.*/*****/webservice/RESTFulWebService/RESTFu ...

  9. Oracle 6 - 锁和闩 - transaction的可串行化

    本文主要内容 1.transaction的可串行化 2.数据库并发带来的问题, dirty read, Nonrepeatable reads, Phantoms幻读 3.隔离级别和2中的问题 4. ...

随机推荐

  1. 在MyEclipse中运行tomcat报错 严重: Error starting static Resources

    严重: Error starting static Resourcesjava.lang.IllegalArgumentException: Document base E:\apache-tomca ...

  2. 未找到或无法访问服务器 请验证实例名称是否正确并且SQL Server 已配置为允许远程连接

    无法连接到sql server 2008服务器 报下错误 其他信息    在与SQL Server建立连接时出现与网络相关的或特定于实例的错误 未找到或无法访问服务器请验证实例名称是否正确并且SQL ...

  3. Core Data & MagicalRecord

    iOS 本地数据持久化存储: 1.plist 2.归档 3.NSUserDefaults 4.NSFileManager 5.数据库 一.CoreData概述 CoreData是苹果自带的管理数据库的 ...

  4. flexigrid

    一.参考资料 1.jQuery插件flexiGrid的完全使用,附代码下载 2.修改flexigrid源码一(json,checkbox)[原创] 3.jQuery +UI + flexigrid做的 ...

  5. JavaScript(2)——对象属性、原型与原型链

    对象属性.原型与原型链 哈哈哈,我的第二篇博客哟,说的是对象属性.原型与原型链.可能这些只是某些小点串联起来的,逻辑性没有很强.所以会对文章的可读性和理解性带来一些困扰.不过,今天我又前进了那么一小步 ...

  6. math ceil以及math floor,math:round

    ◎Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数:◎Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数:◎Math.round()执行标准舍入,即它总 ...

  7. cocos2d-x 3.x 触摸事件

    HelloWorldScene.h bool touchBegan(cocos2d::Touch*touch, cocos2d::Event*event);//触摸开始,返回bool类型 void t ...

  8. “玲珑杯”ACM比赛 Round #1 题解

    A:DESCRIPTION Eric has an array of integers a1,a2,...,ana1,a2,...,an. Every time, he can choose a co ...

  9. 在ubuntu server 上记录和查看cron日志

    1.安装rsyslog apt-get install rsyslog 2.修改它的配置文件 vi /etc/rsyslog.d/50-default.conf 把cron那一行注释去掉 3.然后重启 ...

  10. ThinkPHP 框架执行流程分析

    总体来说,应用的流程涉及到几个文件:Index.phpThinkPHP.phpThink.class.phpApp.class.phpDispatcher.class.phpThinkPHP/Mode ...