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

 

posted @ 2016-12-29 10:25  wuln  阅读(32865)  评论(0编辑  收藏  举报