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