• 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>
  • 相关阅读:
    WCF简单使用(分别部署在控制台和IIS上)
    WCF系列教程之WCF服务配置工具
    053547
    053546
    053545
    053544
    053543
    053542
    053541
    053540
  • 原文地址:https://www.cnblogs.com/hellolong/p/3990729.html
Copyright © 2020-2023  润新知