使用asp.net 做项目不能使用服务器控件的情况也来也多了,没有了服务器控件,前台以后台的数据交互,我觉得json 是不错的选择(特别是使用前框架,ajax请求返回json数据是相当有用的),以前是要用到json数据时就自己去拼数据,一直觉得麻烦,所以就有了这个类。主要也是看了一些网上的资料,和自己使用的心得写的。如果有更好的方法,或者是代码不好,错误度可以提示我,我会改过来。
我知道.net 3.5 就自带json序列化了,一般都市用来序列化对象。我写的这个类也是有用到这个,因为反序列化简单。但是这个自带的,序列化出来的json格式不标准,有可能在前端用不了(php json_decode 好像就不能用),所以最好就是要能够标准一些。下面是代码。
1.这个是序列化的类,使用了自带序列化方法,所以要引入dll(System.ServiceModel.Web;System.Runtime.Serialization)

1 using System;
2 using System.Collections.Generic;
3 using System.Runtime.Serialization.Json;
4 using System.Linq;
5 using System.Web;
6 using System.IO;
7 using System.Data;
8 using System.Text;
9 using System.Reflection;
10
11 namespace json
12 {
13 public class Jsonhelp
14 {
15 //对象级别的数据json化(最好在.net里使用(除非对象里头的属性都是string类型))
16 public static string Objecttojson<T>(T t)
17 {
18 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
19 MemoryStream ms = new MemoryStream();
20 ser.WriteObject(ms, t);
21 string sJson = Encoding.UTF8.GetString(ms.ToArray());
22 ms.Close();
23 return sJson;
24 }
25
26 //json 数据的反序列化(把json 数据转化为对象)
27 public static T Jsontoobject<T>(string jsonString)
28 {
29 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
30 MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
31 T obj = (T)ser.ReadObject(ms);
32 return obj;
33 }
34
35 //针对前端识别不了有属性不是string的情况
36 public static string ObjecttoSjson<T>(T t)
37 {
38 StringBuilder sJson=new StringBuilder();
39 Type type = t.GetType();
40 sJson.Append("{");
41 foreach (PropertyInfo pi in type.GetProperties())
42 {
43 object value = pi.GetValue(t, null); //用pi.GetValue获得值
44 string name = pi.Name;//获得属性的名字,后面就可以根据名字判断来进行些自己想要的操作
45 sJson.Append('"');
46 sJson.Append(name);
47 sJson.Append('"');
48 sJson.Append(':');
49 sJson.Append('"');
50 sJson.Append(value);
51 sJson.Append('"');
52 sJson.Append(',');
53 }
54 string strJson = string.Empty;
55 if (sJson.ToString().Length > 1)
56 {
57 sJson.Remove(sJson.Length-1,1);
58 sJson.Append("}");
59 strJson = sJson.ToString();
60 }
61 else {
62 strJson="";
63 }
64 return strJson;
65 }
66 //把datatable 数据序列化为json
67 public static string Datatabletojson(DataTable dt)
68 {
69 StringBuilder sJson = new StringBuilder();
70 if (dt.Rows.Count > 0) {
71 sJson.Append("[");
72 for (int i = 0; i < dt.Rows.Count; i++)
73 {
74 sJson.Append('{');
75 for (int j = 0; j < dt.Columns.Count; j++)
76 {
77 sJson.Append('"');
78 sJson.Append(dt.Columns[j].ColumnName);
79 sJson.Append('"');
80 sJson.Append(':');
81 sJson.Append('"');
82 sJson.Append(dt.Rows[i][j].ToString());
83 sJson.Append('"');
84
85 if (j != dt.Columns.Count - 1)
86 {
87 sJson.Append(',');
88 }
89 }
90 sJson.Append('}');
91 sJson.Append(',');
92
93 }
94 }
95 sJson.Remove(sJson.Length - 1, 1);
96 sJson.Append(']');
97 return sJson.ToString();
98 }
99
100 //链式对象序列化成json
101 public static string ListobjecttoSjson<T>(List<T> t)
102 {
103 StringBuilder sJson=new StringBuilder();
104 if (t.Count > 0)
105 {
106 sJson.Append("[");
107 foreach (T a in t)
108 {
109 Type type = a.GetType();
110 StringBuilder strJson = new StringBuilder();
111 strJson.Append("{");
112 foreach (PropertyInfo pi in type.GetProperties())
113 {
114 object value = pi.GetValue(a, null); //用pi.GetValue获得值
115 string name = pi.Name;//获得属性的名字,后面就可以根据名字判断来进行些自己想要的操作
116 strJson.Append('"');
117 strJson.Append(name);
118 strJson.Append('"');
119 strJson.Append(':');
120 strJson.Append('"');
121 strJson.Append(value);
122 strJson.Append('"');
123 strJson.Append(',');
124 }
125 if (strJson.ToString().Length > 1)
126 { strJson.Remove(strJson.Length - 1, 1);
127 strJson.Append("}");
128 }
129 sJson.Append(strJson.ToString());
130 sJson.Append(",");
131 }
132 }
133 else {
134 sJson.Append("");
135 }
136 if (sJson.ToString().Length > 1)
137 { sJson.Remove(sJson.Length - 1, 1);
138 sJson.Append("]");
139 }
140 return sJson.ToString() ;
141
142 }
143
144
145
146
147 }
148 }
2.这是使用的例子

1 protected void Page_Load(object sender, EventArgs e)
2 {
3
4 //调用.net自带的类库序列化
5 Person a = new Person();
6 a.Age = 18;
7 a.Name = "sb";
8 string jsonString = Jsonhelp.Objecttojson<Person>(a);
9 Response.Write(jsonString);
10
11 //调用.net自带的类库序反列化
12 Person b = new Person();
13 b = Jsonhelp.Jsontoobject<Person>(jsonString);
14 Response.Write(b.Name+"<br>");
15
16 //对象序列化前端标准json数据格式
17 Response.Write(Jsonhelp.ObjecttoSjson<Person>(b)+"<br>");
18
19
20 //DataTable 序列化
21 SqlConnection conn = new SqlConnection();
22 conn = new SqlConnection();
23 conn.ConnectionString = "Data Source=(local);Initial Catalog=KuaiPan;User ID=sa;Password=sb";
24 conn.Open();
25 string strsql = "select * from tb";
26 SqlCommand cmd = new SqlCommand(strsql, conn);
27 SqlDataReader sqlreader = cmd.ExecuteReader();
28 DataTable dt = new DataTable();
29 dt.Load(sqlreader);
30 Response.Write(Jsonhelp.Datatabletojson(dt)+"<br><br><br>");
31
32
33 //list对象集序列化
34 List<Person >t=new List<Person>();
35 Person ds = new Person();
36 ds.Age = 86;
37 ds.Name = "屌丝";
38 Person dd = new Person();
39 dd.Age = 78;
40 dd.Name = "你妹";
41 t.Add(ds);
42 t.Add(dd);
43 Response.Write(Jsonhelp.ListobjecttoSjson(t));
3.这是结果

来源:https://www.cnblogs.com/try-wyh/p/3447321.html
