程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 三種序列化辦法分享

C# 三種序列化辦法分享

編輯:C#入門知識

C# 三種序列化辦法分享。本站提示廣大學習愛好者:(C# 三種序列化辦法分享)文章只能為提供參考,不一定能成為您想要的結果。以下是C# 三種序列化辦法分享正文


序列化是將一個對象轉換成字撙節以到達將其歷久保留在內存、數據庫或文件中的處置進程。它的重要目標是保留對象的狀況以便今後須要的時刻應用。與其相反的進程叫做反序列化。

序列化一個對象
為了序列化一個對象,我們須要一個被序列化的對象,一個包容被序列化了的對象的(字節)流和一個格局化器。停止序列化之前我們先看看System.Runtime.Serialization名字空間。ISerializable接口許可我們使任何類成為可序列化的類。

假如我們給本身寫的類標識[Serializable]特征,我們就可以將這些類序列化。除非類的成員標志了[NonSerializable],序列化會將類中的一切成員都序列化。

序列化的類型
•二進制(流)序列化
•SOAP序列化
•XML序列化
二進制(流)序列化:
二進制(流)序列化是一種將數據寫到輸入流,以使它可以或許用來主動重組成響應對象的機制。二進制,其名字就暗示它的需要信息是保留在存儲介質上,而這些需要信息請求創立一個對象的准確的二進制正本。在二進制(流)序列化中,全部對象的狀況都被保留起來,而XML序列化只要部門數據被保留起來。為了應用序列化,我們須要引入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協定是一個在異構的運用法式之間停止信息交互的幻想的選擇。我們須要在運用法式中添加System.Runtime.Serialization.Formatters.Soap名字空間以便在.Net中應用SOAP序列化。SOAP序列化的重要優勢在於可移植性。SoapFormatter把對象序列化成SOAP新聞或解析SOAP新聞偏重構被序列化的對象。上面的代碼在.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序列化:
依據MSDN的描寫,“XML序列化將一個對象或參數的地下字段和屬性和辦法的前往值轉換(序列化)成遵守XSD文檔尺度的XML流。由於XML是一個開放的尺度,XML能被任何須要的法式處置,而不論在甚麼平台下,是以XML序列化被用到帶有地下的屬性和字段的強類型類中,它的這些產生和字段被轉換成序列化的格局(在這裡是XML)存儲或傳輸。”

我們必需添加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();

        }
    }
}

甚麼是格局化器?
  一個格局化器用來肯定一個對象的序列格局。它們目標是在收集上傳輸一個對象之前將其序列化成適合的格局。它們供給IFormatter接口。在.NET裡供給了兩個格局化類:BinaryFormatter和SoapFormatter,它們都繼續了IFormatter接口。

  應用序列化
  序列化許可開辟人員保留一個對象的狀況並在須要的時刻重構對象,同時很好地支撐對象存儲和數據交流。經由過程序列化,開辟人員可以應用Web Service發送對象到遠端運用法式,從一個域傳輸對象到另外一個域,以XML的格局傳輸一個對象並能經由過程防火牆,或許在運用法式間堅持平安性或用戶特定信息等等。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved