論序列化與反序列化

来源:https://www.cnblogs.com/namelessblog/archive/2019/09/22/11565909.html

首先給大家介紹一下序列化是用來乾什麼的,他為什麼出現 序列化這種技術說到底其實就是把臨時數據保存在電腦上。大家都知道對於程式而言對象是一種稍縱即逝的數據,不僅僅是程式重啟、電腦重啟,就連內部函數的變化也有可能導致對象的消失,但是總有一些對象是大家不想讓其隨意消失的並且想在下一次開啟程式的時候進行載入 ...


首先給大家介紹一下序列化是用來乾什麼的,他為什麼出現

序列化這種技術說到底其實就是把臨時數據保存在電腦上。大家都知道對於程式而言對象是一種稍縱即逝的數據,不僅僅是程式重啟、電腦重啟,就連內部函數的變化也有可能導致對象的消失,但是總有一些對象是大家不想讓其隨意消失的並且想在下一次開啟程式的時候進行載入,在這種環境下-序列化便出現了,它的意義就是為了保持對象的持久化

在此我為大家介紹一下C#當中的XML序列化和二進位序列化,基本所有序列化的方式都差不多因此就著重介紹這兩種比較常用的序列化方式

  假設類名為:Person  對象名為:P

一: XML序列化

  第一步當然是引入命名空間:Using System.IO;   Using System.Xml.Serialization;

  先實例化我們的類-XmlSerializer

XmlSerializer xml = new XmlSerializer(typeof(Person));

實例化類時的參數為一個Type類型,利用typeof就可以了,typeof裡面傳入類名

  創建出對象xml後開始創FileStream的對象

FileStream fs = new FileStream("asd.xml",FileMode.OpenOrCreate);

  實例化該類時傳入的參數有兩個,第一個是你為文件起的名字-string,第二個是你對IO的操作、一般預設為FileMode.OpenOrCreat

  然後就是序列化了~   方法-Serialize

xml.Serialize(fs,P);

用Serialize這個方法的兩個參數分別是實例化FileStream的對象名-fs 以及你想要保存的對象的名-P

完成這個方法後,我們的XML序列化就結束了~

 

我們想要反序列化的話也簡單,就是最後調用的方法不一樣,在此用方法-Doserialize

Object obj = xml.Doserialize(fs);

用這個方法只要傳入實例化FileStream的對象名-fs 就可以了,他有一個Object類型的返回值,接受它,然後把它強轉為你需要的類型就OK了

二:二進位序列化

  二進位序列化和XML序列化的架構差不多

  首先也是引入命名空間:Using System.IO;

                Using System.Runtime.Senalization.Formatter.Binary;

  先實例化我們的類-BinaryFormatter

BinaryFormatter bin = new BinaryFormatter();

此類實例化時不用參數哦~

然後創FileStream的對象

FileStream fs = new FileStream("asd.xml",FileMode.OpenOrCreate);

實例化該類時傳入的參數有兩個,第一個是你為文件起的名字-string,第二個是你對IO的操作、一般預設為FileMode.OpenOrCreat

  然後就是序列化了~   方法-Serialize

bin.Serialize(fs,P);

用Serialize這個方法的兩個參數分別是實例化FileStream的對象名-fs 以及你想要保存的對象的名-P

完成這個方法後,我們的二進位序列化就結束了~

 

Object obj = bin.Doserialize(fs);

用這個方法只要傳入實例化FileStream的對象名-fs 就可以了,他有一個Object類型的返回值,接受它,然後把它強轉為你需要的類型就OK了

  雖然兩者大部分都是一致的,但是二進位序列化的要求更加多,如下:

1)要進行序列化的類型、類型的父類以及類型中的所有成員的類型都統統要求標記為:

  [Serializable]

2) 二進位序列化只能對類中的欄位進行序列化,如果有一些欄位不想讓其序列化只要標記為:

  [NonSerialized]


您的分享是我們最大的動力!

更多相關文章
  • 在webform中,驗證的流程大致如下圖: 在AOP中: 在Filter中: AuthorizeAttribute許可權驗證 登錄後有許可權控制,有的頁面是需要用戶登錄才能訪問的,需要在訪問頁面增加一個驗證,也不能每個action都一遍。 1、寫一個CustomAuthorAttribute,繼承自Au ...
  • Ajax請求數據響應格式,一個醒目組必須是同意的,前端才知道怎麼應付,還有很多其他情況,比如異常了,有ExceptionFilter,按照固定格式返回,比如沒有許可權,Authorization,按照固定格式返回。 Http請求的本質: 請求--應答式,響應可以那麼豐富?不同的類型其實方式一樣的,只不 ...
  • MVCApplication Application_Statr--RegisterRoutes--給RouteCollection添加規則,請求進到網站 X 請求地址被路由按照順序匹配,遇到一個溫和的就結束,就到對應的控制器和action。 在程式中使用log4net,首先nuget引入程式集 L ...
  •   為了讓我們第一時間知道程式的運行狀態,Asp.Net Core 添加了預設的日誌輸出服務。這看起來並沒有什麼問題,對於開發人員也相當友好,但如果不瞭解日誌輸出的細節,也有可能因為錯誤的日誌級別配置導致性能問題,筆者的同事在一次進行性能測試的時候被輸出日誌誤導,與其討論分析了測 ...
  • 場景 Winform中實現讀取xml配置文件並動態配置ZedGraph的RadioGroup的選項: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100540708 在上面實現了將RadioGroup的選項根據配置文件動態配置後 ...
一周排行
  • 一、背景 代碼實例:https://gitee.com/D_C_L/CurtainEtcAOP.git我們實際系統中有很多操作,是不管做多少次,都應該產生一樣的效果或返回一樣的結果。 例如: 1. 前端重覆提交選中的數據,應該後臺只產生對應這個數據的一個反應結果。 2. 我們發起一筆付款請求,應該只 ...
  • 關鍵字:流程未來節點處理人 工作流快速開發平臺 工作流流設計 業務流程管理 asp.net 開源工作流 業務背景:一個流程在啟動起來後,是可以對一些節點計算出來處理人是誰,流程的走向。對於另外一些節點處理人有可能需要相關的人員調整的。在一些審批的環境下,需要把能夠計算出來的節點處理人在發起時計算出來... ...
  • 簡述 我們做軟體工作的雖然每天都離不開網路,可網路協議細節卻不是每個人都會接觸和深入瞭解。我今天就來和大家一起學習下Socket,並寫一個簡單的聊天程式。 一些基礎類 首先我們每天打開瀏覽器訪問網頁信息都是使用的HTTP/HTTPS協議,而HTTP是通過的TCP建立的連接。TCP底層又是通過的Soc ...
  • 點這裡進入ABP進階教程目錄 在功能按鈕區增加一個自定義按鈕 - Add(創建課程) 添加按鈕 打開展示層(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\Views\Course\Index.js //用以存放Course查詢相關腳本 自帶按鈕已有五個我們再添加一 ...
  • 點這裡進入ABP進階教程目錄 我們嘗試在新增/編輯界面增加一個下拉框用來代替輸入框編輯Status 添加實體 打開領域層(即JD.CRS.Core)的Entitys目錄 //用以存放實體對象添加一個類StatusCode.cs //狀態信息 更新模型 更新查詢視圖模型 打開展示層(即JD.CRS.W ...
  • 在項目視圖中,找到-》輸出 視窗,在視窗中選擇ASP.NET Core Web伺服器,調試項目即可看到執行的sql語句 ...
  • 前言: 通過Fiddler抓取瀏覽器請求數據,相信大家已經都會用了,我們知道Fiddler是通過在本機計算器添加一個預設的代理伺服器來實現的抓包數據的,埠號為:8888。 其實當我們打開Fiddler的設置也可以看到: 然後查看本地計算器的網路代理設置: 基於上面的原理,Fiddler就實現了經過 ...
  • 場景 Winform控制項-DevExpress18下載安裝註冊以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100061243 在上面已經實現DevExpress的安裝之後,拖拽一個TreeList,然後怎樣給 ...
  • 場景 Winform控制項-DevExpress18下載安裝註冊以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100061243 DevExpress的TreeList怎樣設置數據源,從實例入手: https:/ ...
  • 場景 在開發中,經常會有一些全局作用域的常量、欄位、屬性、方法等。 需要將這些設置為全局作用域保存且其實例唯一。 註: 博客主頁: https://blog.csdn.net/badao_liumang_qizhi 關註公眾號 霸道的程式猿 獲取編程相關電子書、教程推送與免費下載。 實現 首先新建一 ...
x