JSON串行化
大多数情况下,我们不会再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串行化的更多相关文章
- Hadoop基础-Protocol Buffers串行化与反串行化
Hadoop基础-Protocol Buffers串行化与反串行化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过很多种序列化文件格式,比如python中的pickl ...
- Hadoop基础-Apache Avro串行化的与反串行化
Hadoop基础-Apache Avro串行化的与反串行化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Apache Avro简介 1>.Apache Avro的来源 ...
- 【Java EE 学习 72 下】【数据采集系统第四天】【移动/复制页分析】【使用串行化技术实现深度复制】
一.移动.复制页的逻辑实现 移动.复制页的功能是在设计调查页面的时候需要实现的功能.规则是如果在同一个调查中的话就是移动,如果是在不同调查中的就是复制. 无论是移动还是复制,都需要注意一个问题,那就是 ...
- PHP面向对象04_串行化
oop04复习 2014-9-3 10:48:45 要点: --1.克隆对象 --2.__toString( ) --3. __call( ) --4.自动加载类 --5.对象串行化 1.克隆对象以及 ...
- 【PHP面向对象(OOP)编程入门教程】22.把对象串行化serialize()方法,__sleep()方法,__wakeup()方法
有时候需要把一个对象在网络上传输,为了方便传输,可以把整个对象转化为二进制串,等到达另一端时,再还原为原来的对象,这个过程称之为串行化(也叫序列化), 就像我们现在想把一辆汽车通过轮船运到美国去,因为 ...
- VC++ chap13 文档与串行化
Lesson 13 文档与串行化 13.1使用CArchive类对文件进行读写操作 //让对象数据持久性的过程称之为串行化,或者序列化 void CGraphicView::OnFileWrite() ...
- Java 对象的串行化(Serialization)
1.什么是串行化 对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把对象的这种能记录自己的状态以便将来再生的能力.叫作对象的持续性(pe ...
- 【性能诊断】四、单功能场景的性能分析(RedGate,找到同一个客户端的并发请求被串行化问题)
问题描述: 客户端js连续发起两个异步http请求,请求地址相同,但参数不同:POST http://*.*.*.*/*****/webservice/RESTFulWebService/RESTFu ...
- Oracle 6 - 锁和闩 - transaction的可串行化
本文主要内容 1.transaction的可串行化 2.数据库并发带来的问题, dirty read, Nonrepeatable reads, Phantoms幻读 3.隔离级别和2中的问题 4. ...
随机推荐
- 快学Scala-第一章 基础
知识点: Scala程序并不是一个解释器,实际发生的是,你输入的内容被快速的编译成字节码,然后这段字节码交由Java虚拟机执行. 以val定义的值是一个常量,以var定义的值是一个变量,声明值或变量但 ...
- ImageLoader的Jar包加载图片
注意:需要添加权限,若缓存图片第二个必须要加 <uses-permission android:name="android.permission.INTERNET" /> ...
- AI 人工智能 探索 (七)
我简单画了一幅图,来讲下 ai 中的设计模式.图形中的这些人物,我想大家都能看的明白. 当 盗贼出现,人们发现了他们,就 呼叫 主类,然后主类再 通知 下面对应的管理局,然后管理局再 分配人手过去 ...
- cocos2d-x 3.10 显示Box2d 调试视图
1.将cocos2d-x-3.10\tests\cpp-tests\Classes\Box2DTestBed目录下的GLES-Render.h和GLES-Render.cpp拷贝到当前项目的Class ...
- java.lang.IllegalArgumentException: Can't convert argument: null
出现这样的异常:: 这是由于eclipse在修改项目名的时候,eclipse自动更新部署了web.xml文件 并且重新生成了xml文件的头部声明. 新增了java的命名把这个javaee去掉就可以了. ...
- Linux关闭防火墙,关闭Selinux
查看防火墙状态 iptables -L or service iptables status 临时性关闭防火墙 iptables -F or service iptables stop 永久性关闭防火 ...
- IndentationError: unexpected indent python
都知道python是对格式要求很严格的,写了一些python但是也没发现他严格在哪里,今天遇到了IndentationError: unexpected indent错误我才知道他是多么的严格. 以后 ...
- .NET 4.0里异常处理的新机制
非原创,转载自: http://www.cnblogs.com/killmyday/archive/2010/09/05/1818533.html .NET里不能捕捉(catch)到一些异常了,而 ...
- 关于python的可变和不可变对象
在python中所有都是对象,在python中只有list和dict是可变对象,其他都是不可变对象. 具体参照:http://www.cnblogs.com/lovemo1314/archive/20 ...
- Eclipse中Ctrl+Alt+Down和Ctrl+Alt+Up不起作用
不起作用是因为跟因特尔的快捷键冲突. 1.在桌面上右键,选择“图形属性......” 2.选择“选项和支持” 3.更改快捷键. 注意:单纯禁用英特尔的快捷键可能不起作用.