asp.net ajax实现(—):Jquery+Json
序列化类名称 |
标记Serializable特性时 |
标记Datacontract特性时 |
备注 |
XmlSerializer |
只能序列化公共字段和属性,不能序列化方法、索引器、私有字段或只读属性(只读集合除外). |
没试过 |
|
BinaryFormatter |
所有的都序列化 |
没试过 |
|
DataContractJsonSerializer |
只序列化字段(包括私有字段和公共字段),如果属性没有对应的字段,则自动为其生成私有字段然后序列化。 |
只序列化标记为DataMember的字段或者属性(包括私有的和公共的) |
可以生成Json |
JsonQueryStringConverter |
只序列化字段(包括私有字段和公共字段),如果属性没有对应的字段,则自动为其生成私有字段。 |
只序列化标记为DataMember的字段或者属性(包括私有的和公共的) |
可以生成Json |
JavaScriptSerializer |
序列化公共的字段或者属性 |
序列化公共的字段或者属性,不管是否标记DataMember(如果私有字段标记了DataMember也不会序列化,同样,如果公共字段没有标记DataMember也会被序列化) |
可以生成Json(已过时,这个类很变态) |
DataContractSerializer |
序列化所有的字段和属性(包括私有和共有的,但是标记为NoSerializable的除外) |
只序列化标记为DataMember的字段或者属性(包括私有的和公共的) |
|

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

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64


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

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 }
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决