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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM