• 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();
  • 相关阅读:
    编程用外星人宏建设置教程(在网上找了好久没几个相关帖子,自己研究写下来留个备忘吧)
    通过selenium+pyautogui模拟登陆淘宝(完美实现)
    python之字符串的五种拼接方式
    python之批量文件重命名
    爬虫系列之链家的信息爬取及数据分析
    跟潭州学院的强子老师学习网络爬虫---爬取全书网
    Python之编写测试用例,unittest模块中的TestCase类中的六种断言方法,以及setUp()函数。
    Python学习之路
    GridBagLayout的帮助类
    eclipse和cygwin搭建C++环境的修正版本
  • 原文地址:https://www.cnblogs.com/roboot/p/6874268.html
Copyright © 2020-2023  润新知