C#实现JSON序列化与反序列化
JSON(JavaScript Object Notation)——JavaScript对象表示法,是JavaScript用来处理数据的一种格式,大部分是用来处理JavaScript和web服务器端之间的数据交换,把后台web服务器的数据传递到前台,然后使用JavaScript进行处理,例如ajax等,是独立于语言和平台的轻量级的数据交换格式。
JSON的数据类型:
- number:和JavaScript的number完全一致;
- boolean:就是JavaScript的true或false;
- string:就是JavaScript的string;
- null:就是JavaScript的null;
- array:就是JavaScript的Array表示方式——[];
- object:就是JavaScript的{ ... }表示方式。
以及上面的任意组合。并且,JSON还定死了字符集必须是UTF-8。为了统一解析,JSON的字符串规定必须用双引号"",Object的键也必须用双引号"",如果JSON中含有转义字符,则需要转义。
1、使用 JavaScriptSerializer类实现序列化
namespace: System.Web.Script.Serialization
eg:
1 // 序列化
2 private string ObjectToJson(Person obj)
3 {
4 JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
5 return jsonSerialize.Serialize(obj);
6 }
7 // 反序列化
8 private Person JsonToObject(string jsonStr)
9 {
10 JavaScriptSerializer jsonSerialize = new JavaScriptSerializer();
11 return jsonSerialize.Deserialize<Person>(jsonStr);
12 }
注:可用 [ScriptIgnore] 标记不序列化的属性
2、使用 DataContractJsonSerializer类实现序列化
namespace:System.Runtime.Serialization.Json
eg:
1 // 序列化
2 using (MemoryStream stream =new MemoryStream())
3 {
4 DataContractJsonSerializer jsonSerialize =new DataContractJsonSerializer(Person);
5 jsonSerialize.WriteObject(stream, obj);
6 jsonStr = Encoding.UTF8.GetString(stream.ToArray());
7 }
8 // 反序列化
9 using (MemoryStream stream =new MemoryStream(Encoding.UTF8.GetBytes(jsonStr)))
10 {
11 DataContractJsonSerializer jsonSerialize =new DataContractJsonSerializer(Person);
12 obj = (Person)jsonSerialize.ReadObject(stream);
13 }
注:可用 [IgnoreDataMember] 标记不序列化的属性
3、使用开源类库Newtonsoft.Json实现序列化
namespace:Newtonsoft.Json
eg:
1 using System;
2 using System.Collections.Generic;
3 using System.Data;
4 using System.Linq;
5 using System.Web;
6 using System.Web.UI;
7 using System.Web.UI.WebControls;
8 using Newtonsoft.Json;
9 using Newtonsoft.Json.Linq;
10
11 namespace DataInterface
12 {
13 public partial class UserLogin : System.Web.UI.Page
14 {
15 protected void Page_Load(object sender, EventArgs e)
16 {
17 string errMsg = string.Empty;
18 if (Request["JsonString"] != null)
19 {
20 string jsonString = Request["JsonString"].ToString();
21 JObject array;
22 string userName = string.Empty, password = string.Empty;
23 try
24 {
25 array = (JObject)JsonConvert.DeserializeObject(jsonString);
26 userName = array["userName"].ToString().Trim('"');
27 password = array["password"].ToString().Trim('"').ToUpper();
28 }
29 catch
30 {
31 errMsg = "传入参数错误";
32 }
33 }
34 }
35 }
36 }
1 string jsonText = string.Empty;
2 StringWriter sw = new StringWriter();
3 JsonWriter writer = new JsonTextWriter(sw);
4
5 writer.WriteStartObject();
6 writer.WritePropertyName("result");
7 writer.WriteValue("1");
8 writer.WritePropertyName("msg");
9 writer.WriteValue("sucess");
10 writer.WriteEndObject();
11 writer.Flush();
12 jsonText = sw.GetStringBuilder().ToString();