最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中關(guān)于序列化與反序列化的三種方法

 更新時(shí)間:2022年03月15日 09:31:11   作者:暗影玄極  
序列化是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^程,本文主要介紹了C#中關(guān)于序列化與反序列化的三種方法,文章具有一定的參考價(jià)值,感興趣的可以了解一下

一.序列化與反序列化解釋

       序列化 (Serialization)是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^程。在序列化期間,對(duì)象將其當(dāng)前狀態(tài)寫入到臨時(shí)或持久性存儲(chǔ)區(qū)。以后,可以通過從存儲(chǔ)區(qū)中讀取或反序列化對(duì)象的狀態(tài),重新創(chuàng)建該對(duì)象。

二.序列化目的

   1、以某種存儲(chǔ)形式使自定義對(duì)象持久化;

   2、將對(duì)象從一個(gè)地方傳遞到另一個(gè)地方;

   3、使程序更具維護(hù)性等

三.C#中的三種序列化說明

1、以二進(jìn)制格式序列化

       二進(jìn)制序列化保持類型保真度,這對(duì)于在應(yīng)用程序的不同調(diào)用之間保留對(duì)象的狀態(tài)很有用。例如,通過將對(duì)象序列化到剪貼板,可在不同的應(yīng)用程序之間共享對(duì)象。您可以將對(duì)象序列化到流、磁盤、內(nèi)存和網(wǎng)絡(luò)等等。遠(yuǎn)程處理使用序列化“通過值”在計(jì)算機(jī)或應(yīng)用程序域之間傳遞對(duì)象。

     引用命名空間:using System.Runtime.Serialization.Formatters.Binary;

2、以SOAP格式序列化

      SOAP(Simple Object Access Protocol )簡(jiǎn)單對(duì)象訪問協(xié)議是在分散或分布式的環(huán)境中交換信息的簡(jiǎn)單的協(xié)議,是一個(gè)基于XML的協(xié)議,它包括四個(gè)部分:SOAP封裝(envelop),封裝定義了一個(gè)描述消息中的內(nèi)容是什么,是誰(shuí)發(fā)送的,誰(shuí)應(yīng)當(dāng)接受并處理它以及如何處理它們的框架;SOAP編碼規(guī)則(encoding rules),用于表示應(yīng)用程序需要使用的數(shù)據(jù)類型的實(shí)例; SOAP RPC表示(RPC representation),表示遠(yuǎn)程過程調(diào)用和應(yīng)答的協(xié)定;SOAP綁定(binding),使用底層協(xié)議交換信息。

     引用命名空間:using System.Runtime.Serialization.Formatters.Soap;

3、將對(duì)象序列化到XML文檔

       同SOAP也是保存成XML文件.但沒有其他額外信息。XML 序列化僅序列化public類型的字段(其他兩種類型能保存所有類型的字段),且不保持類型保真度,當(dāng)您要提供或使用數(shù)據(jù)而不限制使用該數(shù)據(jù)的應(yīng)用程序時(shí),這一點(diǎn)是很有用的。由于 XML 是一個(gè)開放式標(biāo)準(zhǔn),因此,對(duì)于通過 Web 共享數(shù)據(jù)而言,這是一個(gè)很好的選擇。SOAP 同樣是一個(gè)開放式標(biāo)準(zhǔn),這使它也成為一個(gè)頗具吸引力的選擇。

     引用命名空間:using System.Xml.Serialization;

三.C#中的三種序列化代碼示例

using System;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;//二進(jìn)制序列化
using System.Runtime.Serialization.Formatters.Soap;//SOAP序列化
using System.Xml.Serialization;//XML序列化
namespace WindowsFormsApplication1
{
? ? public partial class Form1 : Form
? ? {
? ? ? ? public Form1()
? ? ? ? {
? ? ? ? ? ? InitializeComponent();
? ? ? ? }
? ? ? ? //如果要想保存某個(gè)class中的字段,必須在class前面加個(gè)這樣[Serializable]
? ? ? ? [Serializable]
? ? ? ? public class Person
? ? ? ? {
? ? ? ? ? ? public int age;
? ? ? ? ? ? public string name;
? ? ? ? ? ? [NonSerialized] //如果某個(gè)字段不想被保存,則加個(gè)這樣的標(biāo)志
? ? ? ? ? ? public string secret;
? ? ? ? }
? ? ? ? //序列化
? ? ? ? private void btnXlh_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? Person person = new Person();
? ? ? ? ? ? person.age = 28;
? ? ? ? ? ? person.name = "Hoam\r\n";
? ? ? ? ? ? person.secret = "no look";
? ? ? ? ? ? string str = System.AppDomain.CurrentDomain.BaseDirectory;
? ? ? ? ? ? //二進(jìn)制序列化
? ? ? ? ? ? FileStream streamHx = new FileStream(str+"personHx.txt", FileMode.Create);
? ? ? ? ? ? BinaryFormatter bFormatHx = new BinaryFormatter();
? ? ? ? ? ? bFormatHx.Serialize(streamHx, person);
? ? ? ? ? ? streamHx.Close();
? ? ? ? ? ? //SOAP序列化
? ? ? ? ? ? FileStream streamSoap = new FileStream(str + "personSoap.xml", FileMode.Create);
? ? ? ? ? ? SoapFormatter bFormatSoap = new SoapFormatter();
? ? ? ? ? ? bFormatSoap.Serialize(streamSoap, person);
? ? ? ? ? ? streamSoap.Close();
? ? ? ? ? ? //XML序列化 ?//某個(gè)字段加[NonSerialized]標(biāo)志不起作用,仍被保存
? ? ? ? ? ? FileStream streamXml = new FileStream(str+ "personXml.xml", FileMode.Create);
? ? ? ? ? ? XmlSerializer xmlserilize = new XmlSerializer(typeof(Person));
? ? ? ? ? ? xmlserilize.Serialize(streamXml, person);
? ? ? ? ? ? streamXml.Close();
? ? ? ? }
? ? ? ? //反序列化
? ? ? ? private void btnFxlh_Click(object sender, EventArgs e)
? ? ? ? {
? ? ? ? ? ? Person person = new Person();
? ? ? ? ? ? string str = System.AppDomain.CurrentDomain.BaseDirectory;
? ? ? ? ? ? object data;
? ? ? ? ? ? //二進(jìn)制反序列化
? ? ? ? ? ? FileStream streamHx = new FileStream(str + "personHx.txt", FileMode.OpenOrCreate);
? ? ? ? ? ? BinaryFormatter bFormatHx = new BinaryFormatter();
? ? ? ? ? ? data = bFormatHx.Deserialize(streamHx); //反序列化得到的是一個(gè)object對(duì)象.須做下類型轉(zhuǎn)換
? ? ? ? ? ? streamHx.Close();
? ? ? ? ? ? //SOAP反序列化
? ? ? ? ? ? FileStream streamSoap = new FileStream(str + "personSoap.xml", FileMode.OpenOrCreate);
? ? ? ? ? ? SoapFormatter bFormatSoap = new SoapFormatter();
? ? ? ? ? ? data = bFormatSoap.Deserialize(streamSoap); //反序列化得到的是一個(gè)object對(duì)象.須做下類型轉(zhuǎn)換
? ? ? ? ? ? streamSoap.Close();
? ? ? ? ? ? //XML反序列化?
? ? ? ? ? ? FileStream streamXml = new FileStream(str + "personXml.xml", FileMode.OpenOrCreate);
? ? ? ? ? ? XmlSerializer xmlserilize = new XmlSerializer(typeof(Person));
? ? ? ? ? ? data = xmlserilize.Deserialize(streamXml); //反序列化得到的是一個(gè)object對(duì)象.須做下類型轉(zhuǎn)換
? ? ? ? ? ? streamXml.Close();
? ? ? ? }
? ? }
}

到此這篇關(guān)于C#中關(guān)于序列化與反序列化的三種方法的文章就介紹到這了,更多相關(guān)C# 序列化與反序列化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#獲取指定目錄下指定文件的方法

    C#獲取指定目錄下指定文件的方法

    這篇文章介紹了C#獲取指定目錄下指定文件的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#使用struct直接轉(zhuǎn)換下位機(jī)數(shù)據(jù)的示例代碼

    C#使用struct直接轉(zhuǎn)換下位機(jī)數(shù)據(jù)的示例代碼

    這篇文章主要介紹了C#使用struct直接轉(zhuǎn)換下位機(jī)數(shù)據(jù)的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 深入了解c# 匿名類型

    深入了解c# 匿名類型

    這篇文章主要介紹了c# 匿名類型的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#中Predicate<T>與Func<T, bool>泛型委托的用法實(shí)例

    C#中Predicate<T>與Func<T, bool>泛型委托的用法實(shí)例

    這篇文章主要介紹了C#中Predicate<T>與Func<T, bool>泛型委托的用法,指出了其用法中的誤區(qū)及易錯(cuò)點(diǎn),有助于更好的理解泛型委托的用法,需要的朋友可以參考下
    2014-09-09
  • C#判斷指定分區(qū)是否是ntfs格式的方法

    C#判斷指定分區(qū)是否是ntfs格式的方法

    這篇文章主要介紹了C#判斷指定分區(qū)是否是ntfs格式的方法,涉及C#中DriveFormat屬性的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 關(guān)于C#中yield關(guān)鍵字的深入解析

    關(guān)于C#中yield關(guān)鍵字的深入解析

    這篇文章主要給大家介紹了關(guān)于C#中yield關(guān)鍵字的深入解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用C#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • C#創(chuàng)建dll類庫(kù)的圖文步驟

    C#創(chuàng)建dll類庫(kù)的圖文步驟

    類庫(kù)讓我們的代碼可復(fù)用,我們只需要在類庫(kù)中聲明變量一次,就能在接下來的過程中無(wú)數(shù)次地使用,而無(wú)需在每次使用前都要聲明它。這樣一來,就節(jié)省了我們的內(nèi)存空間,需要的朋友可以參考下
    2017-01-01
  • Unity實(shí)現(xiàn)虛擬搖桿效果

    Unity實(shí)現(xiàn)虛擬搖桿效果

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)虛擬搖桿效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái)的操作方法

    這篇文章主要介紹了C#結(jié)合JavaScript實(shí)現(xiàn)上傳視頻到騰訊云點(diǎn)播平臺(tái),上傳視頻功能,主要要解決兩個(gè)問題,一是在服務(wù)端通過C#生成簽名和SDKID,二是在客戶端通過JavaScript上傳視頻到騰訊云點(diǎn)播服務(wù)器,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • C#操作本地文件及保存文件到數(shù)據(jù)庫(kù)的基本方法總結(jié)

    C#操作本地文件及保存文件到數(shù)據(jù)庫(kù)的基本方法總結(jié)

    C#使用System.IO中的文件操作方法在Windows系統(tǒng)中處理本地文件相當(dāng)順手,這里我們還總結(jié)了在Oracle中保存文件的方法,嗯,接下來就來看看整理的C#操作本地文件及保存文件到數(shù)據(jù)庫(kù)的基本方法總結(jié)
    2016-05-05

最新評(píng)論

晴隆县| 永泰县| 工布江达县| 茂名市| 襄垣县| 无锡市| 商城县| 丹寨县| 普兰店市| 祁东县| 梓潼县| 广德县| 巴东县| 海丰县| 荆州市| 丰顺县| 彭泽县| 蓝山县| 鄂托克前旗| 砀山县| 剑川县| 新源县| 迭部县| 益阳市| 永新县| 疏勒县| 师宗县| 鹤岗市| 略阳县| 驻马店市| 太仆寺旗| 井陉县| 上林县| 六枝特区| 启东市| 双桥区| 同仁县| 顺昌县| 理塘县| 呈贡县| 格尔木市|