首页 > 代码库 > JSON串行化
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>
JSON串行化
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。