zoukankan      html  css  js  c++  java
  • asp.net ajax实现(—):Jquery+Json

    序列化类名称

        标记Serializable特性时

       标记Datacontract特性时

    备注

    XmlSerializer

     只能序列化公共字段和属性,不能序列化方法、索引器、私有字段或只读属性(只读集合除外).

        没试过

    BinaryFormatter

    所有的都序列化

     没试过

    DataContractJsonSerializer

    只序列化字段(包括私有字段和公共字段),如果属性没有对应的字段,则自动为其生成私有字段然后序列化。

    只序列化标记为DataMember的字段或者属性(包括私有的和公共的)

    可以生成Json

    JsonQueryStringConverter

    只序列化字段(包括私有字段和公共字段),如果属性没有对应的字段,则自动为其生成私有字段。

    只序列化标记为DataMember的字段或者属性(包括私有的和公共的)

    可以生成Json

    JavaScriptSerializer

    序列化公共的字段或者属性

    序列化公共的字段或者属性,不管是否标记DataMember(如果私有字段标记了DataMember也不会序列化,同样,如果公共字段没有标记DataMember也会被序列化)

     可以生成Json(已过时,这个类很变态)

    DataContractSerializer

    序列化所有的字段和属性(包括私有和共有的,但是标记为NoSerializable的除外)

    只序列化标记为DataMember的字段或者属性(包括私有的和公共的)

    适合轻量级的应用,客户端序列化和反序列化可用Json的JSON.parse()和JSON.stringify(),
    但服务端序列化和反序列化的时候,遇到一些问题,我采用了三种方式,其中三种方式序列化和反序列化的方式各有不同,比较请点这里看。
    以下是我的操作的代码:
    前台:

     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2<html xmlns="http://www.w3.org/1999/xhtml" >
     3<head runat="server">
     4    <title>无标题页</title>
     5    <script type="text/javascript" src="../JS/jquery-1.3.min.js"></script>
     6    <script type="text/javascript" src="../JS/json2.js"></script>
     7    <script type="text/javascript">
     8        function GetValue()
     9        {
    10            $.get("Process.aspx"{Action:"get"}function (data, textStatus){
    11     var name=$("#TName")[0];
    12     var address=$("#TAddress")[0];
    13     var age=$("#TAge")[0];
    14     var obj=JSON.parse(data);
    15     name.value=obj.Name;
    16     address.value=obj.Address;
    17     age.value=obj.Age;
    18   }
    );
    19        }

    20        
    21        function SetValue()
    22        {
    23            var person=new Person($("#TName")[0].value,$("#TAddress")[0].value,$("#TAge")[0].value);
    24            var str=JSON.stringify(person);
    25            alert(str);
    26             $.post("Process.aspx"{Action:"post",JsonStr:""+ str +""}function (data, textStatus){
    27                alert("发送成功");
    28   }
    );
    29        }

    30        
    31        function Person(name,address)
    32        {
    33            this.Name=name;
    34            this.Address=address;
    35        }

    36    
    </script>
    37</head>
    38<body>
    39    <form id="form1" runat="server">
    40    <div>
    41        <table>
    42            <tr>
    43                <td>姓名:</td>
    44                <td><input type="text" id="TName" /></td>
    45            </tr>
    46            <tr>
    47                <td>住址:</td>
    48                <td><input type="text" id="TAddress"/></td>
    49            </tr>
    50            <tr>
    51                <td>年龄:</td>
    52                <td><input type="text" id="TAge" /></td>
    53            </tr>
    54        </table>
    55        <table>
    56            <tr>
    57                <td><input type="button" onclick="GetValue();" value="加载数据"></td>
    58                <td><input type="button" value="更新数据" onclick="SetValue()"></td>
    59            </tr>
    60        </table>
    61    </div>
    62    </form>
    63</body>
    64</html>
    后台:
     

     1 using System;
     2 using
     System.Collections;
     3 using
     System.Configuration;
     4 using
     System.Data;
     5 using
     System.Linq;
     6 using
     System.Web;
     7 using
     System.Web.Security;
     8 using
     System.Web.UI;
     9 using
     System.Web.UI.HtmlControls;
    10 using
     System.Web.UI.WebControls;
    11 using
     System.Web.UI.WebControls.WebParts;
    12 using
     System.Xml.Linq;
    13 using
     System.Runtime.Serialization.Json;
    14 using
     System.ServiceModel.Dispatcher;
    15 using
     System.Text;
    16 using
     System.Web.Script.Serialization;
    17 using
     System.IO;
    18 using
     System.Runtime.Serialization;
    19 namespace
     WebDemo.AjaxTest
    20 
    {
    21     public partial class
     Process : System.Web.UI.Page
    22 
        {
    23         protected void Page_Load(object
     sender, EventArgs e)
    24 
            {
    25             if (!Request.Params.AllKeys.Contains("JsonStr"
    ))
    26 
                {
    27 
                    GetData();
    28 
                }
    29             else

    30             {
    31 
                    LoadData();
    32 
                }
    33 
            }
    34         /// <summary>

    35         /// 从客户端加载数据
    36         /// </summary>

    37         private void LoadData()
    38 
            {
    39             string str = Request.Params["JsonStr"
    ];
    40             DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof
    (Model.User));
    41             MemoryStream ms=new
     MemoryStream(System.Text.Encoding.UTF8.GetBytes(str.ToCharArray()));
    42             Model.User user =
     (Model.User)serializer.ReadObject(ms);
    43 
                ms.Close();
    44 
            }
    45         /// <summary>

    46         /// 向客户端发送数据
    47         /// </summary>

    48         private void GetData()
    49 
            {
    50             Model.User user = new
     Model.User();
    51             user.Address = "上海市闵行区"
    ;
    52             user.Age = 26
    ;
    53             user.Name = "Windstore"
    ;
    54             string
     resultStr;
    55             //方式一:System.Runtime.Serialization.Json Assembly:System.ServiceModel.Web

    56             DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Model.User));
    57             MemoryStream stream = new
     MemoryStream();
    58 
                serializer.WriteObject(stream, user);
    59             stream.Position = 0
    ;
    60             StreamReader sr = new
     StreamReader(stream);
    61             resultStr =
     sr.ReadToEnd();
    62 
                sr.Close();
    63 
                stream.Close();
    64             //
    方式二:System.ServiceModel.Dispatcher.JsonQueryStringConverter Assembly:System.ServiceModel
    65             //
    JsonQueryStringConverter convert = new JsonQueryStringConverter();
    66             //
    resultStr = convert.ConvertValueToString(user, typeof(Model.User));
    67             //
    方式三:System.Web.Script.Serialization
    68             //
    StringBuilder sb = new StringBuilder();
    69             //
    JavaScriptSerializer jsServilizer = new JavaScriptSerializer();
    70             //
    jsServilizer.Serialize(user, sb);
    71             //resultStr = sb.ToString();

    72             Response.ContentType = "application/json";
    73 
                Response.Write(resultStr);
    74 
                Response.Flush();
    75 
                Response.End();
    76 
            }
    77 
        }
    78 
    }
    79 
    Model类:
     

     1 using System;
     2 using
     System.Collections.Generic;
     3 using
     System.Linq;
     4 using
     System.Text;
     5 using
     System.Runtime.Serialization;
     6 namespace
     WebDemo.Model
     7 
    {
     8     /// <summary>

     9     /// 用户实体
    10     /// </summary>

    11     [DataContract]
    12     public class
     User
    13 
        {
    14         #region 私有字段

    15         private string named;
    16         private string
     addressd;
    17         private int
     aged;
    18         #endregion

    19         #region 公共属性
    20         /// <summary>
    21         /// 姓名
    22         /// </summary>

    23         [DataMember]
    24         public string
     Name
    25 
            {
    26             get { return
     named; }
    27             set { named =
     value; }
    28 
            }
    29 
            
    30         /// <summary>

    31         /// 家庭住址
    32         /// </summary>

    33         [DataMember]
    34         public string
     Address
    35 
            {
    36             get { return
     addressd; }
    37             set { addressd =
     value; }
    38 
            }
    39 
            
    40         /// <summary>

    41         /// 年龄
    42         /// </summary>

    43         [DataMember]
    44         public int
     Age
    45 
            {
    46             get { return
     aged; }
    47             set { aged =
     value; }
    48 
            }
    49         #endregion

    50     }
    51 
     
    客户端用JSON.stringify()反序列化的时候,默认的值都是字符串类型的,如果想返回整型值,可以用 JSON.stringify(myObject, replacer);用回调函数replacer处理。
  • 相关阅读:
    在线|九月月考选填题
    函数$f(x)=e^xpm e^{-x}$相关
    偶函数性质的推广
    2020年全国卷Ⅱ卷文科数学选填题解析版
    2020年全国卷Ⅱ卷文科数学解答题解析版
    待定系数法
    特殊方法求函数解析式
    phd文献阅读日志-4.1
    phd文献阅读日志-1.2~3.2(1.2,2.1,2.2,3.1,3.2)
    完美解决linux下vim在终端不能用鼠标复制的问题
  • 原文地址:https://www.cnblogs.com/haoliansheng/p/1444258.html
Copyright © 2011-2022 走看看