国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C# 的三種序列化方法

2019-11-17 03:20:11
字體:
供稿:網(wǎng)友
C# 的三種序列化方法

  序列化是將一個對象轉(zhuǎn)換成字節(jié)流以達(dá)到將其長期保存在內(nèi)存、數(shù)據(jù)庫或文件中的處理過程。它的主要目的是保存對象的狀態(tài)以便以后需要的時候使用。與其相反的過程叫做反序列化。

  序列化一個對象

  為了序列化一個對象,我們需要一個被序列化的對象,一個容納被序列化了的對象的(字節(jié))流和一個格式化器。進行序列化之前我們先看看System.Runtime.Serialization名字空間。ISerializable接口允許我們使任何類成為可序列化的類。

  如果我們給自己寫的類標(biāo)識[Serializable]特性,我們就能將這些類序列化。除非類的成員標(biāo)記了[NonSerializable],序列化會將類中的所有成員都序列化。

  序列化的類型

  • 二進制(流)序列化
  • SOAP序列化
  • xml序列化

  二進制(流)序列化:

  二進制(流)序列化是一種將數(shù)據(jù)寫到輸出流,以使它能夠用來自動重構(gòu)成相應(yīng)對象的機制。二進制,其名字就暗示它的必要信息是保存在存儲介質(zhì)上,而這些必要信息要求創(chuàng)建一個對象的精確的二進制副本。在二進制(流)序列化中,整個對象的狀態(tài)都被保存起來,而XML序列化只有部分?jǐn)?shù)據(jù)被保存起來。為了使用序列化,我們需要引入System.Runtime.Serialization.Formatters.Binary名字空間. 下面的代碼使用BinaryFormatter類序列化.NET中的string類型的對象。

123456789101112131415161718192021222324252627282930using System;using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;namespace SerializationTest{class PRogram{static void Main(string[] args){//Serialization of String Object string strobj = "test string for serialization";FileStream stream = new FileStream("C://StrObj.txt", FileMode.Create, Fileaccess.Write ,FileShare.None);BinaryFormatter formatter = new BinaryFormatter();formatter.Serialize(stream, strobj);stream.Close();//Deserialization of String ObjectFileStream readstream = new FileStream("C://StrObj.txt", FileMode.Open , FileAccess.Read ,FileShare.Read );string readdata = (string)formatter.Deserialize(readstream);readstream.Close();Console.WriteLine(readdata);Console.ReadLine();}}}

  SOAP序列化:

  SOAP協(xié)議是一個在異構(gòu)的應(yīng)用程序之間進行信息交互的理想的選擇。我們需要在應(yīng)用程序中添加System.Runtime.Serialization.Formatters.Soap名字空間以便在.Net中使用SOAP序列化SOAP序列化的主要優(yōu)勢在于可移植性。SoapFormatter把對象序列化成SOAP消息或解析SOAP消息并重構(gòu)被序列化的對象。下面的代碼在.Net中使用SoapFormatter類序列化string類的對象。

12345678910111213141516171819202122232425262728using System; using System.IO;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Soap ;namespace SerializationTest{class Program{static void Main(string[] args){//Serialization of String Object string strobj = "test string for serialization";FileStream stream = new FileStream("C://StrObj.txt", FileMode.Create, FileAccess.Write ,FileShare.None);SoapFormatter formatter = new SoapFormatter();formatter.Serialize(stream, strobj);stream.Close();//Deserialization of String ObjectFileStream readstream = new FileStream("C://StrObj.txt", FileMode.Open , FileAccess.Read ,FileShare.Read );string readdata = (string)formatter.Deserialize(readstream);readstream.Close();Console.WriteLine(readdata);Console.ReadLine();}}}

  XML序列化:

  根據(jù)MSDN的描述,“XML序列化將一個對象或參數(shù)的公開字段和屬性以及方法的返回值轉(zhuǎn)換(序列化)成遵循XSD文檔標(biāo)準(zhǔn)的XML流。因為XML是一個開放的標(biāo)準(zhǔn),XML能被任何需要的程序處理,而不管在什么平臺下,因此XML序列

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 嘉义市| 涞源县| 武城县| 昭苏县| 射阳县| 马关县| 蒙山县| 彭水| 礼泉县| 邢台县| 边坝县| 靖江市| 潮州市| 揭阳市| 南乐县| 福清市| 绥中县| 虹口区| 五原县| 尖扎县| 大新县| 杭锦旗| 屯昌县| 柞水县| 东乌珠穆沁旗| 轮台县| 齐河县| 芦山县| 康保县| 南投县| 乌拉特后旗| 罗江县| 麻栗坡县| 普洱| 谢通门县| 杨浦区| 河池市| 栖霞市| 乳源| 临泉县| 德江县|