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[16];
    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 = 1992;
        _album.Tracks.SetValue("Llama", 0);
        _album.Tracks.SetValue("Eliza", 1);
        _album.Tracks.SetValue("Cavern", 2);
        _album.Tracks.SetValue("Poor Heart", 3);
        _album.Tracks.SetValue("Stash", 4);
        _album.Tracks.SetValue("Manteca", 5);
        _album.Tracks.SetValue("Guelah Papyrus", 6);
        _album.Tracks.SetValue("Magilla", 7);
        _album.Tracks.SetValue("The Landlady", 8);
        _album.Tracks.SetValue("Glide", 9);
        _album.Tracks.SetValue("Tweezer", 10);
        _album.Tracks.SetValue("The Mango Song", 11);
        _album.Tracks.SetValue("Chalk Dust Torture", 12);
        _album.Tracks.SetValue("Faht", 13);
        _album.Tracks.SetValue("Catapult", 14);
        _album.Tracks.SetValue("Tweezer Reprise", 15);
    }

    [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>
时间: 2024-11-13 08:20:34

JSON串行化的相关文章

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?        

对象的序列化(串行化)分析(一)

对象的序列化(串行化)序列化概念:(1)对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下 来,在需要时再将对象恢复.我们把对象的这种能记录自己的状态以便将来再生的能力.叫作对象的持续性(persistence).对象通过写出描述自己状 态的数值来记录自己 ,这个过程叫对象的串行化(Serialization-连续) .(2)一个对象随着创建而存在,随着程序结束而结束.那 如果我要保存一个对象的状态呢?Java序列化能够将对象的状态写入byte流存储起来,也从其他

.Net里的哈希表和串行化

.Net里的哈希表和串行化 介绍 本文介绍了,在.net里,使用哈希表和串行化的C#用法.这里使用的示例应用程序是一个电话簿.电话簿应用程序,是一个控制台的程序.它允许你添加,查看,列出和删除它里面的姓名和电话号码. 哈系表是"键-值"对的集合.在.net里,类Hashtable是哈希表的实现.通过调用Add方法,传递你想添加的键值对,可以完成添加.作为键来使用的这些对象,必须实现Object.Equals 和Object.GetHashCode方法. private Hashtabl

MFC 文件I/O和串行化

1.枚举所有文件夹(递归) void EnumerateFolders () { WIN32_FIND_DATA fd; HANDLE hFind = ::FindFirstFile (_T ("*.*"), &fd); if (hFind != INVALID_HANDLE_VALUE) { do { if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { CString name = fd.cFileName; i

IT十八掌作业_java基础第十五天_IO串行化/深度复制

1.使用RandomAccessFile实现文件合成. 2.使用java中的串行化技术实现对象图(100只猫Cat集合,但是Cat的owner不需要串行化)的深度复制. 3.阐述串行化的过程,应用场景,串行ID的用途. 1. package com.it18zhang; /** * 将分割的文件进行合成 */ import java.io.File; import java.io.FileInputStream; import java.io.RandomAccessFile; public c

MFC 之支持串行化的类

MFC中可以串行化的类必须满足以下条件 1 从CObject派生,或者间接派生 2 重写Serialize函数 3 使用DECLARE_SERIAL宏 4 定义不带参数的构造函数 5 在类的实现文件中用IMPLENT_SERIAL宏 在绘图保存的程序中,类CPaints作为保存的基本单元,它里面存储了绘图类型,起始点,终止点三个成员变量. 然后在绘图中每当绘制一幅图都会将CPaints作为保存对象,保存在View类的CObArray类型的变量中. 在文件保存中需要在Document类中保存Vie

Java基础第十五天_IO串行化/深度复制

1.使用RandomAccessFile实现文件切割. 答: package app_作业; import java.io.File; import java.io.FileOutputStream; import java.io.RandomAccessFile; public class app15_使用RandomAccessFile实现文件切割 { public static void main(String[] args) throws Exception { // 源文件 File 

Java对象的深复制----利用串行化进行深复制

把对象写到流里的过程是串行化(Serilization)过程,但是在Java程序圈里又非常形象地称为“冷冻”或者“腌咸菜”过程:而把对象从流中读出来的并行化(Deserialization)过程则叫做“解冻”或者“回鲜”过程.应当指出的是,写到流里的是对象的一个拷贝,而原来对象仍然存在于JVM里面,因此“腌成咸菜”的只是对象的一个拷贝. 在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里(腌成咸菜),再从流里读回来

PHP中串行化的使用

1. [代码][PHP]代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <?     /*         作者 : shyhero         邮箱 : [email protected]         Q  Q : 1757424878      */     class Person{               //声明一个Person类