欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C# 三種序列化方法分享

 更新時間:2014年02月26日 15:30:57   作者:  
這篇文章主要介紹了C# 三種序列化方法,需要的朋友可以參考下

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

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

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

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

復制代碼 代碼如下:

using 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 Object
            FileStream 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)的應用程序之間進行信息交互的理想的選擇。我們需要在應用程序中添加System.Runtime.Serialization.Formatters.Soap名字空間以便在.Net中使用SOAP序列化。SOAP序列化的主要優(yōu)勢在于可移植性。SoapFormatter把對象序列化成SOAP消息或解析SOAP消息并重構(gòu)被序列化的對象。下面的代碼在.Net中使用SoapFormatter類序列化string類的對象。

復制代碼 代碼如下:

using 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 Object
            FileStream 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文檔標準的XML流。因為XML是一個開放的標準,XML能被任何需要的程序處理,而不管在什么平臺下,因此XML序列化被用到帶有公開的屬性和字段的強類型類中,它的這些發(fā)生和字段被轉(zhuǎn)換成序列化的格式(在這里是XML)存儲或傳輸?!?/P>

我們必須添加System.XML.Serialization引用以使用XML序列化。使用XML序列化的基礎是XmlSerializer。下面的代碼是在.Net中使用XmlSerializer類序列化string對象。

復制代碼 代碼如下:

using System;
using System.IO;
using System.Xml.Serialization;

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);
            XmlSerializer  xmlserializer = new XmlSerializer(typeof(string));
            xmlserializer.Serialize(stream, strobj);
            stream.Close();

 
            //Deserialization of String Object
            FileStream readstream = new FileStream("C:\\StrObj.txt", FileMode.Open , FileAccess.Read ,
            FileShare.Read );
            string readdata = (string)xmlserializer.Deserialize(readstream);
            readstream.Close();
            Console.WriteLine(readdata);
            Console.ReadLine();

        }
    }
}

什么是格式化器?
  一個格式化器用來確定一個對象的序列格式。它們目的是在網(wǎng)絡上傳輸一個對象之前將其序列化成合適的格式。它們提供IFormatter接口。在.NET里提供了兩個格式化類:BinaryFormatter和SoapFormatter,它們都繼承了IFormatter接口。

  使用序列化
  序列化允許開發(fā)人員保存一個對象的狀態(tài)并在需要的時候重構(gòu)對象,同時很好地支持對象存儲和數(shù)據(jù)交換。通過序列化,開發(fā)人員可以利用Web Service發(fā)送對象到遠端應用程序,從一個域傳輸對象到另一個域,以XML的格式傳輸一個對象并能通過防火墻,或者在應用程序間保持安全性或用戶特定信息等等。

相關(guān)文章

  • C#中Timer定時器類的簡單使用

    C#中Timer定時器類的簡單使用

    定時器就是經(jīng)過固定時間,執(zhí)行固定任務,本文主要介紹了C#中Timer定時器類的簡單使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • WPF彈出自定義窗口的方法

    WPF彈出自定義窗口的方法

    這篇文章主要介紹了WPF彈出自定義窗口的方法,結(jié)合實例形式分析了WPF自定義窗口的創(chuàng)建與調(diào)用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • C# Winform 調(diào)用系統(tǒng)接口操作 INI 配置文件的代碼

    C# Winform 調(diào)用系統(tǒng)接口操作 INI 配置文件的代碼

    封裝了一小段代碼, 調(diào)用系統(tǒng)接口, 操作配置文件. 一般用于 .ini 文件, 或者其它鍵值對格式的配置文件
    2011-05-05
  • C#各種異常處理方式總結(jié)

    C#各種異常處理方式總結(jié)

    這篇文章介紹了C#各種異常的處理方式,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Unity后處理效果之邊角壓暗

    Unity后處理效果之邊角壓暗

    這篇文章主要為大家詳細介紹了Unity后處理效果之邊角壓暗,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • c#保存窗口位置大小操作類(序列化和文件讀寫功能)

    c#保存窗口位置大小操作類(序列化和文件讀寫功能)

    這篇文章主要介紹了c#保存窗口位置大小操作類,其實就是把序列化和文件讀寫合到一塊,大家參考使用
    2013-11-11
  • C#實現(xiàn)的自定義郵件發(fā)送類完整實例(支持多人多附件)

    C#實現(xiàn)的自定義郵件發(fā)送類完整實例(支持多人多附件)

    這篇文章主要介紹了C#實現(xiàn)的自定義郵件發(fā)送類,具有支持多人多附件的功能,涉及C#郵件操作的相關(guān)技巧,需要的朋友可以參考下
    2015-12-12
  • 解析C#設計模式編程中備忘錄模式的運用

    解析C#設計模式編程中備忘錄模式的運用

    這篇文章主要介紹了C#設計模式編程中備忘錄模式的運用,備忘錄模式用來保存與對象有關(guān)的數(shù)據(jù)用以在將來對對象進行復原,需要的朋友可以參考下
    2016-02-02
  • C#開發(fā)教程之FTP上傳下載功能詳解

    C#開發(fā)教程之FTP上傳下載功能詳解

    這篇文章主要為大家詳細介紹了C#開發(fā)教程之FTP上傳下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C#中三種Timer計時器的詳細用法

    C#中三種Timer計時器的詳細用法

    這篇文章介紹了C#中三種Timer計時器的詳細用法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05

最新評論