• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#实现JSON序列化与反序列化

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

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

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#ThreadPool类(线程池)发布时间:2022-07-13
下一篇:
C#继承机制发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap