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