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();