客户端代理的作用 在对象里做了一个标记 –“__type” = “ComplexType.Color” 服务器端根据标记选择反序列化的目标类型 可出现“多态”效果 Employee.cs Code: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; /// <summary> ///Employee 的摘要说明 /// </summary> public abstract class Employee { public Employee() { // //TODO: 在此处添加构造函数逻辑 // } private string _fristname; public string Fristname { get { return _fristname; } set { _fristname = value; } } private string _lastname; public string Lastname { get { return _lastname; } set { _lastname = value; } } private int _year; public int Year { get { return _year; } set { _year = value; } } public abstract int Salary(); } public class Sxs : Employee { public override int Salary() { return 2000; } } public class Djl : Employee { public override int Salary() { return 2000 + 100*(Year +3); } } public class Zsz : Employee { public override int Salary() { return 2000 + 100*(Year + 1); } } WebService.cs Code: using System; using System.Collections; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Web.Script.Services; /// <summary> ///WebService 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] public class WebService : System.Web.Services.WebService { public WebService () { //如果使用设计的组件,请取消注释以下行 //InitializeComponent(); } [WebMethod] [GenerateScriptType(typeof(Sxs))] [GenerateScriptType(typeof(Zsz))] [GenerateScriptType(typeof(Djl))] public string HelloWorld(Employee employee) { return "Hello My Name is:" + employee.Fristname +employee.Lastname+ " My Salary:" + employee.Salary(); } } Default.aspx Code: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> <mce:style type="text/css"><!-- #Select1 { width: 160px; } --></mce:style><style type="text/css" mce_bogus="1"> #Select1 { width: 160px; } </style> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" > <Services> <asp:ServiceReference Path="WebService.asmx" /> </Services> </asp:ScriptManager> <div> Your FristName:<input id="Text1" type="text" /><br /> Your LastName:<input id="Text2" type="text" /><br /> Your Title: <select id="Select1" name="D1"> <option value="Sxs">实习生</option> <option value="Djl">总经理</option> <option value="Zsz">董事长</option> </select><br /> Your Workyear:<input id="Text3" type="text" /><br /> <input id="showmessage" type="button" value="Show_Info" οnclick="ShowEmployee()" /></div> <div id=message></div> <mce:script language=javascript type="text/javascript"><!-- function ShowMessage(info) { $get("message").innerHTML+=(info+"<br>"); } function ShowEmployee() { var selecto=$get("Select1"); var selectemployee=selecto.options[selecto.selectedIndex].text; // var yg=null; // switch(selectemployee) // { // case"实习生": // yg=new Sxs(); // break; // case"总经理": // yg=new Djl(); // break; // case "董事长": // yg=new Zsz(); // break; // } var yg=new Object(); yg.Fristname=$get("Text1").value; yg.Lastname=$get("Text2").value; yg.Year=parseInt($get("Text3").value,10); yg.__type=selecto.options[selecto.selectedIndex].value; WebService.HelloWorld(yg,OnSuccess); } function OnSuccess(result) { $get("message").innerHTML=result; } // --></mce:script> </form> </body> </html> 参考:ASP.NET AJAX深入浅出系列课程