C# 序列化

WBOY
WBOY原創
2024-09-03 15:30:13733瀏覽

以下文章提供了 C# 序列化的概述。將物件實例轉換為資料流的過程稱為序列化,並且物件實例的狀態轉換為資料流,因為它可以跨不同網路傳輸並持久保存在儲存位置中。這是序列化的一個優點,可以將轉換後的資料流以跨平台相容的格式跨不同網路傳輸,並將轉換後的串流資料以持久或非持久物件狀態保存到儲存媒體中,以便可以在不同的網路上傳輸相同的副本。後來創建的。

C# 序列化物件的步驟

以下是C#序列化物件的步驟:

  • 建立了一個流物件。
  • 建立了一個 BinaryFormatter 物件。
  • 呼叫 Serialize( ) 方法。

C# 序列化的工作原理

  • 每當我們使用應用程式時,都需要將資料儲存在持久或非持久的媒體中,以便以後可以檢索相同的資料。這可以透過使用序列化的概念來實現。
  • 將物件的實例轉換為位元組流,將物件的狀態移到檔案的記憶體或資料庫中的過程稱為序列化。
  • 序列化對於將物件以相容的格式透過網路傳輸到跨平台至關重要。
  • 也可以使用序列化來建立物件的克隆。
  • 程式中必須包含 Runtime.Serialization 命名空間才能在 C# 中使用序列化。
  • [ Serialized ] 屬性用於在 C# 中使類別可序列化。

演示 [ Serialized ] 類別的範例類別:

代碼:

[Serializable]
public class Check
{
public int code;
public string name;
}
  • 類似地,如果我們想要讓類別的任何成員不可序列化,我們可以使用 [ NonSerialized() ] 屬性。

考慮下面的範例類別來示範 [ NonSerialized() ] 屬性:

代碼:

[Serializable]
public class Check
{
public int code;
public string name;
[NonSerialized()]
Public double price;
}
  • C# 支援以下類型的序列化。

下面給出了 C# 支持的序列化類型:

1.二進位序列化

  • 所有序列化技術中最快的是二元序列化。
  • 可以使用二進位序列化將物件序列化為二進位流。
  • 當使用二元序列化將物件序列化為輸出流時,物件的身份就會保留。
  • 系統。運行時。系列化。格式化程序。程式中必須包含二進位命名空間才能使用二進位序列化。

2. SOAP 序列化

  • 簡單物件存取協定是 SOAP 的縮寫。
  • 如果我們必須將物件從一個應用程式傳輸到由異質架構組成的另一應用程序,我們會使用簡單物件存取協定序列化。
  • 可移植性是使用簡單物件存取協定序列化的主要好處。
  • 可以使用簡單物件存取協定序列化以簡單物件存取協定的形式序列化物件。
  • 系統。運行時。系列化。格式化程序。程式中必須包含 Soap 命名空間才能使用簡單物件存取協定序列化。

3. XML 序列化

  • 可以使用 XML 序列化將類別實例的公共成員序列化為 XML 流。
  • 與二元序列化的速度相比,XML 序列化的速度非常慢。
  • 透過使用 XML 序列化提供跨平台支援。
  • XML 序列化是基於文字的。
  • XML 序列化易於閱讀。
  • XML 序列化可以輕鬆編輯。
  • 可以在 XmlAttribute 上設定屬性,以使用 XML 序列化來序列化該屬性。

考慮下面的程式碼來示範 XmlAttribute 的使用:

代碼:

[XmlAttribute("Name")]
public string Name
{
get
{
return Name;
}
set
{
Name = val;
}
}
  • 我們利用 XmlSerializer 透過 XML 序列化來序列化物件。

考慮下面的程式碼來示範 XmlSerializer 的使用:

代碼:

XmlSerializer Serializer = new XmlSerializer(typeof(Prod));
using (TextWriter Writer = new StreamWriter(@"C:\Prod.xml"))
{
xmlSerializer.Serialize(Writer, prodObject);
}

4.自訂序列化

  • 為了控制某種類型實例的序列化和反序列化,我們使用自訂序列化。
  • 可以透過實作ISerialized介面來實現自訂序列化。
  • GetObjectData() 方法由 ISerialized 介面宣告。

考慮下面的程式碼,透過實作 ISerialized 介面來示範自訂序列化:

代碼:

[Serializable]
public class Prod : ISerializable
{
public void GetObjectData(SerializationInfo information, StreamingContext cont)
{
//Usual code
}
}

範例

下面給出的是 C# 序列化的範例:

示範序列化概念的 C# 程式。

代碼:

using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
//a namespace called demo is created
namespace Demo
{
//Serializable attribute is declared
[Serializable]
//a class check is defined which will be used for serialization
class Check
{
public int identity;
public String nam;
static void Main(string[] args)
{
//an object of the check class is created to serialize it to the file Example.txt
Check ob = new Check();
ob.identity = 10;
ob.nam = "Shobha";
//a file stream is created
IFormatter format = new BinaryFormatter();
Stream stream1 = new FileStream(@"E:\Example.txt",FileMode.Create,FileAccess.Write);
//serialization of the object of the class check is done
format.Serialize(stream1, ob);
stream1.Close();
//a file stream is created
stream1 = new FileStream(@"E:\Example.txt",FileMode.Open,FileAccess.Read);
//the object of the class check is deserialized
Check ob1 = (Check)format.Deserialize(stream1);
//the data is written to the console
Console.WriteLine(ob1.identity);
Console.WriteLine(ob1.nam);
Console.ReadKey();
}
}
}

Output:

C# 序列化

In the above program, a namespace called demo is defined. Then a Serializable attribute is defined. A class check is defined to demonstrate the concept of serialization using this class. Two properties identity and nam are defined in the class to which the values 10 and Shobha are assigned respectively. Then an object of the check class is created to serialize it to the file Example.txt. Then a formatter class is defined to convert the object of the class check to a binary stream.

Then a file stream object is created to open the file Example.txt in write mode to write the values of the properties identity and nam into it. Then serialize method is used to transfer the binary data into the text file. Finally, We use deserialize method to deserialize the contents of the text file Example.txt and the data is written to the console as shown in the output snapshot above.

以上是C# 序列化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:C# 中的定時器下一篇:C# 中的定時器