首頁 web前端 js教程 Json怎麼實現序列化與反序列化(附程式碼)

Json怎麼實現序列化與反序列化(附程式碼)

Apr 25, 2018 pm 03:24 PM
javascript json 序列化

這次帶給大家Json怎麼實現序列化與反序列化(附代碼),Json實現序列化與反序列化的注意事項有哪些,下面就是實戰案例,一起來看一下。

什麼是JSON?

JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write and easy for machines to parse and generate. JSON is a text format that is completely language independent.

翻譯:Json【javascript物件表示方法】,它是一個輕量級的資料交換格式,我們可以很簡單的來讀取和寫它,並且它很容易被電腦轉換和生成,它是完全獨立於語言的。

Json支援下面兩種資料結構:

  1. #鍵值對的集合--各種不同的程式語言,都支援這種資料結構;

  2. 有序的列表類型值的集合--這其中包含數組,集合,向量,或序列,等等。

Json有以下幾種表現形式

1.物件

#一個沒有順序的「鍵/值」,一個物件以花括號「{」開始,並以花括號"}"結束,在每一個「鍵」的後面,有一個冒號,並且使用逗號來分隔多個鍵值對。

例如:

  var user = {"name":"Manas","gender":"Male","birthday":"1987-8-8"}
登入後複製

2.陣列

#設定值的順序,一個陣列以中括號"["開始,並以中括號" ]"結束,並且所有的值使用逗號分隔

例如:

var userlist = [{"user":{"name":"Manas","gender":"Male","birthday":"1987-8-8"}}, 
{"user":{"name":"Mohapatra","Male":"Female","birthday":"1987-7-7"}}]
登入後複製
#3.字串任意數量的Unicode字符,使用引號做標記,並使用反斜線來分隔。
  1. 例如:

    var userlist = "{\"ID\":1,\"Name\":\"Manas\",\"Address\":\"India\"}"
    登入後複製
    好了,介紹完JSON,現在說正題。
  2. 序列化和反序列化有三種方式:

  3. #使用

    JavaScriptSerializer

    類別

使用DataContractJsonSerializer類別

#使用JSON.NET類別庫

我們先來看看使用DataContractJsonSerializer的情況

DataContractJsonSerializer

類別幫助我們序列化和反序列化Json,他在組件 System.Runtime.Serialization.dll下的

System.Runtime.Serialization.Json

命名空間

裡。

首先,這裡,我新建一個控制台的程序,新建一個類別Student#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Serialization;
namespace JsonSerializerAndDeSerializer
{
 [DataContract]
 public class Student
 {
  [DataMember]
  public int ID { get; set; }
  [DataMember]
  public string Name { get; set; }
  [DataMember]
  public int Age { get; set; }
  [DataMember]
  public string Sex { get; set; }
 }
}
登入後複製

注意:

上面的Student實體中的契約[DataMember],[DataContract],是使用

DataContractJsonSerializer序列化和反序列化必須要加的,對於其他兩種方式不必加,也可以的。

###我們程式的程式碼:#########要先引用組件,在引入這個命名空間###
//----------------------------------------------------------------------------------------------
//使用DataContractJsonSerializer方式需要引入的命名空间,在System.Runtime.Serialization.dll.中
using System.Runtime.Serialization.Json;
//--------------------------------------------------------------------------------------------
登入後複製
#region 1.DataContractJsonSerializer方式序列化和反序列化
   Student stu = new Student()
    {
     ID = 1,
     Name = "曹操",
     Sex = "男",
     Age = 1000
    };
   //序列化
   DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(Student));
   MemoryStream msObj = new MemoryStream();
   //将序列化之后的Json格式数据写入流中
   js.WriteObject(msObj, stu);
   msObj.Position = 0;
   //从0这个位置开始读取流中的数据
   StreamReader sr = new StreamReader(msObj, Encoding.UTF8);
   string json = sr.ReadToEnd();
   sr.Close();
   msObj.Close();
   Console.WriteLine(json);
   //反序列化
   string toDes = json;
   //string to = "{\"ID\":\"1\",\"Name\":\"曹操\",\"Sex\":\"男\",\"Age\":\"1230\"}";
   using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(toDes)))
   {
    DataContractJsonSerializer deseralizer = new DataContractJsonSerializer(typeof(Student));
    Student model = (Student)deseralizer.ReadObject(ms);// //反序列化ReadObject
    Console.WriteLine("ID=" + model.ID);
    Console.WriteLine("Name=" + model.Name);
    Console.WriteLine("Age=" + model.Age);
    Console.WriteLine("Sex=" + model.Sex);
   }
   Console.ReadKey(); 
   #endregion
登入後複製
######運行之後結果是:# ########### ############再看看###使用JavaScript###JsonSerializer的情況:############ JavaScriptSerializer is a class which helps to serialize and deserialize JSON. It is present in namespace System.Web.Script.Serialization which is available in assembly System.Web.Extensions.dll. To serialize a .Net objuse to Jerial string. It's possible to deserialize JSON string to .Net object using Deserialize or DeserializeObject methods. Let's see how to implement serialization and deserialization using JavaScriptSerializer.#########這裡要先引用######
//-----------------------------------------------------------------------------------------
//使用JavaScriptSerializer方式需要引入的命名空间,这个在程序集System.Web.Extensions.dll.中
using System.Web.Script.Serialization;
//----------------------------------------------------------------------------------------
登入後複製
#region 2.JavaScriptSerializer方式实现序列化和反序列化
   Student stu = new Student()
    {
     ID = 1,
     Name = "关羽",
     Age = 2000,
     Sex = "男"
    };
   JavaScriptSerializer js = new JavaScriptSerializer();
   string jsonData = js.Serialize(stu);//序列化
   Console.WriteLine(jsonData);
   ////反序列化方式一:
   string desJson = jsonData;
   //Student model = js.Deserialize<Student>(desJson);// //反序列化
   //string message = string.Format("ID={0},Name={1},Age={2},Sex={3}", model.ID, model.Name, model.Age, model.Sex);
   //Console.WriteLine(message);
   //Console.ReadKey(); 
   ////反序列化方式2
   dynamic modelDy = js.Deserialize<dynamic>(desJson); //反序列化
   string messageDy = string.Format("动态的反序列化,ID={0},Name={1},Age={2},Sex={3}",
    modelDy["ID"], modelDy["Name"], modelDy["Age"], modelDy["Sex"]);//这里要使用索引取值,不能使用对象.属性
   Console.WriteLine(messageDy);
   Console.ReadKey(); 
   #endregion
登入後複製

结果是:

 

最后看看使用JSON.NET的情况,引入类库:

 

下面的英文,看不懂可略过。。。

Json.NET is a third party library which helps conversion between JSON text and .NET object using the JsonSerializer. The JsonSerializer converts .NET objects into their JSON equivalent text and back again by mapping the .NET object property names to the JSON property names. It is open source software and free for commercial purposes.

The following are some awesome【极好的】 features,
Flexible JSON serializer for converting between .NET objects and JSON.
LINQ to JSON for manually reading and writing JSON.
High performance, faster than .NET's built-in【内嵌】 JSON serializers.
Easy to read JSON.
Convert JSON to and from XML.
Supports .NET 2, .NET 3.5, .NET 4, Silverlight and Windows Phone.
Let's start learning how to install and implement:

In Visual Studio, go to Tools Menu -> Choose Library Package Manger -> Package Manager Console. It opens a command window where we need to put the following command to install Newtonsoft.Json.

Install-Package Newtonsoft.Json
OR
In Visual Studio, Tools menu -> Manage Nuget Package Manger Solution and type “JSON.NET” to search it online. Here's the figure,

 

//使用Json.NET类库需要引入的命名空间
//-----------------------------------------------------------------------------
using Newtonsoft.Json;
//-------------------------------------------------------------------------
登入後複製
#region 3.Json.NET序列化
   List<Student> lstStuModel = new List<Student>() 
   {
   
   new Student(){ID=1,Name="张飞",Age=250,Sex="男"},
   new Student(){ID=2,Name="潘金莲",Age=300,Sex="女"}
   };
   //Json.NET序列化
   string jsonData = JsonConvert.SerializeObject(lstStuModel);
   Console.WriteLine(jsonData);
   Console.ReadKey();
   //Json.NET反序列化
   string json = @"{ 'Name':'C#','Age':'3000','ID':'1','Sex':'女'}";
   Student descJsonStu = JsonConvert.DeserializeObject<Student>(json);//反序列化
   Console.WriteLine(string.Format("反序列化: ID={0},Name={1},Sex={2},Sex={3}", descJsonStu.ID, descJsonStu.Name, descJsonStu.Age, descJsonStu.Sex));
   Console.ReadKey(); 
   #endregion
登入後複製

运行之后,结果是:

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

使用jquery动态遍历Json对象属性与值步骤详解

jQuery深拷贝Json对象详解(附代码)

以上是Json怎麼實現序列化與反序列化(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MySQL5.7和MySQL8.0的差別是什麼? MySQL5.7和MySQL8.0的差別是什麼? Feb 19, 2024 am 11:21 AM

MySQL5.7和MySQL8.0是兩個不同的MySQL資料庫版本,它們之間有以下一些主要差異:效能改進:MySQL8.0相對於MySQL5.7有一些效能改進。其中包括更好的查詢優化器、更有效率的查詢執行計劃產生、更好的索引演算法和平行查詢等。這些改進可以提高查詢效能和整體系統效能。 JSON支援:MySQL8.0引入了對JSON資料類型的原生支持,包括JSON資料的儲存、查詢和索引。這使得在MySQL中處理和操作JSON資料變得更加方便和有效率。事務特性:MySQL8.0引進了一些新的事務特性,如原子

PHP 數組轉 JSON 的效能最佳化技巧 PHP 數組轉 JSON 的效能最佳化技巧 May 04, 2024 pm 06:15 PM

PHP數組轉JSON的效能最佳化方法包括:使用JSON擴充和json_encode()函數;新增JSON_UNESCAPED_UNICODE選項以避免字元轉義;使用緩衝區提高循環編碼效能;快取JSON編碼結果;考慮使用第三方JSON編碼庫。

Jackson庫中註解如何控制JSON序列化和反序列化? Jackson庫中註解如何控制JSON序列化和反序列化? May 06, 2024 pm 10:09 PM

Jackson庫中的註解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱@JsonGetter:使用獲取方法@JsonSetter:使用設定方法反序列化:@JsonIgnoreProperties:忽略屬性@ JsonProperty:指定名稱@JsonCreator:使用建構子@JsonDeserialize:自訂邏輯

深入了解PHP:JSON Unicode轉中文的實作方法 深入了解PHP:JSON Unicode轉中文的實作方法 Mar 05, 2024 pm 02:48 PM

深入了解PHP:JSONUnicode轉中文的實作方法在開發中,我們經常會遇到需要處理JSON資料的情況,而JSON中的Unicode編碼在一些場景下會為我們帶來一些問題,特別是當需要將Unicode編碼轉換為中文字元時。在PHP中,有一些方法可以幫助我們實現這個轉換過程,以下將介紹常用的方法,並提供具體的程式碼範例。首先,讓我們先來了解一下JSON中Un

Java序列化如何影響效能? Java序列化如何影響效能? Apr 16, 2024 pm 06:36 PM

序列化对Java性能的影响:序列化过程依赖于反射,会显著影响性能。序列化需要创建字节流存储对象数据,导致内存分配和处理成本。序列化大对象会消耗大量内存和时间。序列化后的对象在网络上传输时会增加负载量。

PHP 數組轉 JSON 的快捷技巧 PHP 數組轉 JSON 的快捷技巧 May 03, 2024 pm 06:33 PM

PHP陣列可透過json_encode()函數轉換為JSON字串(例如:$json=json_encode($array);),反之亦可用json_decode()函數從JSON轉換為陣列($array=json_decode($json);) 。其他技巧還包括:避免深度轉換、指定自訂選項以及使用第三方程式庫。

C++ 函式庫如何進行序列化與反序列化? C++ 函式庫如何進行序列化與反序列化? Apr 18, 2024 am 10:06 AM

C++函式庫序列化和反序列化指南序列化:建立輸出流並將其轉換為存檔格式。將物件序列化到存檔中。反序列化:建立輸入流並將其從存檔格式還原。從存檔中反序列化物件。實戰範例:序列化:建立輸出流。建立存檔物件。建立物件並將其序列化到存檔中。反序列化:建立輸入流。建立存檔物件。建立物件並從存檔中反序列化。

PHP教學:如何將JSON Unicode轉換為中文字符 PHP教學:如何將JSON Unicode轉換為中文字符 Mar 05, 2024 pm 06:36 PM

JSON(JavaScriptObjectNotation)是一種輕量級的資料交換格式,通常用於Web應用程式之間的資料交換。在處理JSON資料時,我們經常會遇到Unicode編碼的中文字元(例如"u4e2du6587"),需要將其轉換為可讀的中文字元。在PHP中,我們可以透過一些簡單的方法來實現這個轉換。接下來,我們將詳細介紹如何將JSONUnico

See all articles