zoukankan      html  css  js  c++  java
  • 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();
  • 相关阅读:
    关于词向量工作原理的理解
    LDA-线性判别分析(四)其他几个相关问题
    LDA-线性判别分析(三)推广到 Multi-classes 情形
    LDA-线性判别分析(一)预备知识
    LDA-线性判别分析(二)Two-classes 情形的数学推导
    为什么国内的网盘公司都在 TB 的级别上竞争,成本会不会太高?
    为什么我们喜欢用 sigmoid 这类 S 型非线性变换?
    UFLDL 教程学习笔记(四)主成分分析
    关于协方差矩阵的理解
    UFLDL 教程学习笔记(三)自编码与稀疏性
  • 原文地址:https://www.cnblogs.com/wuln/p/6231807.html
Copyright © 2011-2022 走看看