以下文章提供了 C# 序列化的概述。將對(duì)象實(shí)例轉(zhuǎn)換為數(shù)據(jù)流的過(guò)程稱為序列化,并且對(duì)象實(shí)例的狀態(tài)轉(zhuǎn)換為數(shù)據(jù)流,因?yàn)樗梢钥绮煌W(wǎng)絡(luò)傳輸并持久保存在存儲(chǔ)位置中。這就是序列化的優(yōu)點(diǎn),可以將轉(zhuǎn)換后的數(shù)據(jù)流以跨平臺(tái)兼容的格式跨不同網(wǎng)絡(luò)傳輸,并將轉(zhuǎn)換后的流數(shù)據(jù)以持久或非持久對(duì)象狀態(tài)保存到存儲(chǔ)介質(zhì)中,以便可以在不同的網(wǎng)絡(luò)上傳輸相同的副本。后來(lái)創(chuàng)建的。
C# 序列化對(duì)象的步驟
以下是C#序列化對(duì)象的步驟:
- 創(chuàng)建了一個(gè)流對(duì)象。
- 創(chuàng)建了一個(gè) BinaryFormatter 對(duì)象。
- 調(diào)用 Serialize( ) 方法。
C# 序列化的工作原理
- 每當(dāng)我們使用應(yīng)用程序時(shí),都需要將數(shù)據(jù)存儲(chǔ)在持久或非持久的介質(zhì)中,以便以后可以檢索相同的數(shù)據(jù)。這可以通過(guò)使用序列化的概念來(lái)實(shí)現(xiàn)。
- 將對(duì)象的實(shí)例轉(zhuǎn)換為字節(jié)流,將對(duì)象的狀態(tài)移動(dòng)到文件的內(nèi)存或數(shù)據(jù)庫(kù)中的過(guò)程稱為序列化。
- 序列化對(duì)于將對(duì)象以兼容的格式通過(guò)網(wǎng)絡(luò)傳輸?shù)娇缙脚_(tái)至關(guān)重要。
- 還可以使用序列化創(chuàng)建對(duì)象的克隆。
- 程序中必須包含 Runtime.Serialization 命名空間才能在 C# 中使用序列化。
- [ Serialized ] 屬性用于在 C# 中使類可序列化。
演示 [ Serialized ] 類的示例類:
代碼:
[Serializable] public class Check { public int code; public string name; }
- 類似地,如果我們想讓類的任何成員不可序列化,我們可以使用 [ NonSerialized() ] 屬性。
考慮下面的示例類來(lái)演示 [ NonSerialized() ] 屬性:
代碼:
[Serializable] public class Check { public int code; public string name; [NonSerialized()] Public double price; }
- C# 支持以下類型的序列化。
下面給出了 C# 支持的序列化類型:
1.二進(jìn)制序列化
- 所有序列化技術(shù)中最快的是二進(jìn)制序列化。
- 可以使用二進(jìn)制序列化將對(duì)象序列化為二進(jìn)制流。
- 當(dāng)使用二進(jìn)制序列化將對(duì)象序列化為輸出流時(shí),對(duì)象的身份被保留。
- 系統(tǒng)。運(yùn)行時(shí)。系列化。格式化程序。程序中必須包含二進(jìn)制命名空間才能使用二進(jìn)制序列化。
2. SOAP 序列化
- 簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議是 SOAP 的縮寫(xiě)。
- 如果我們必須將對(duì)象從一個(gè)應(yīng)用程序傳輸?shù)接僧悩?gòu)架構(gòu)組成的另一應(yīng)用程序,我們會(huì)使用簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議序列化。
- 可移植性是使用簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議序列化的主要好處。
- 可以使用簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議序列化以簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議的形式序列化對(duì)象。
- 系統(tǒng)。運(yùn)行時(shí)。系列化。格式化程序。程序中必須包含 Soap 命名空間才能使用簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議序列化。
3. XML 序列化
- 類實(shí)例的公共成員可以使用 XML 序列化序列化為 XML 流。
- 與二進(jìn)制序列化的速度相比,XML 序列化的速度非常慢。
- 通過(guò)使用 XML 序列化提供跨平臺(tái)支持。
- XML 序列化是基于文本的。
- XML 序列化易于閱讀。
- XML 序列化可以輕松編輯。
- 可以在 XmlAttribute 上設(shè)置屬性,以使用 XML 序列化來(lái)序列化該屬性。
考慮下面的代碼來(lái)演示 XmlAttribute 的使用:
代碼:
[XmlAttribute("Name")] public string Name { get { return Name; } set { Name = val; } }
- 我們利用 XmlSerializer 通過(guò) XML 序列化來(lái)序列化對(duì)象。
考慮下面的代碼來(lái)演示 XmlSerializer 的使用:
代碼:
XmlSerializer Serializer = new XmlSerializer(typeof(Prod)); using (TextWriter Writer = new StreamWriter(@"C:\Prod.xml")) { xmlSerializer.Serialize(Writer, prodObject); }
4.自定義序列化
- 為了控制某種類型實(shí)例的序列化和反序列化,我們使用自定義序列化。
- 可以通過(guò)實(shí)現(xiàn)ISerialized接口來(lái)實(shí)現(xiàn)自定義序列化。
- GetObjectData() 方法由 ISerialized 接口聲明。
考慮下面的代碼,通過(guò)實(shí)現(xiàn) ISerialized 接口來(lái)演示自定義序列化:
代碼:
[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:
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# 序列化的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱門(mén)文章

熱工具

記事本++7.3.1
好用且免費(fèi)的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)代碼編輯軟件(SublimeText3)

多線程和異步的區(qū)別在于,多線程同時(shí)執(zhí)行多個(gè)線程,而異步在不阻塞當(dāng)前線程的情況下執(zhí)行操作。多線程用于計(jì)算密集型任務(wù),而異步用于用戶交互操作。多線程的優(yōu)勢(shì)是提高計(jì)算性能,異步的優(yōu)勢(shì)是不阻塞 UI 線程。選擇多線程還是異步取決于任務(wù)性質(zhì):計(jì)算密集型任務(wù)使用多線程,與外部資源交互且需要保持 UI 響應(yīng)的任務(wù)使用異步。

C#和C 的歷史與演變各有特色,未來(lái)前景也不同。1.C 由BjarneStroustrup在1983年發(fā)明,旨在將面向?qū)ο缶幊桃隒語(yǔ)言,其演變歷程包括多次標(biāo)準(zhǔn)化,如C 11引入auto關(guān)鍵字和lambda表達(dá)式,C 20引入概念和協(xié)程,未來(lái)將專注于性能和系統(tǒng)級(jí)編程。2.C#由微軟在2000年發(fā)布,結(jié)合C 和Java的優(yōu)點(diǎn),其演變注重簡(jiǎn)潔性和生產(chǎn)力,如C#2.0引入泛型,C#5.0引入異步編程,未來(lái)將專注于開(kāi)發(fā)者的生產(chǎn)力和云計(jì)算。

可以采用多種方法修改 XML 格式:使用文本編輯器(如 Notepad )進(jìn)行手工編輯;使用在線或桌面 XML 格式化工具(如 XMLbeautifier)進(jìn)行自動(dòng)格式化;使用 XML 轉(zhuǎn)換工具(如 XSLT)定義轉(zhuǎn)換規(guī)則;或者使用編程語(yǔ)言(如 Python)進(jìn)行解析和操作。修改時(shí)需謹(jǐn)慎,并備份原始文件。

有三種將 XML 轉(zhuǎn)換為 Word 的方法:使用 Microsoft Word、使用 XML 轉(zhuǎn)換器或使用編程語(yǔ)言。

將 XML 轉(zhuǎn)換為 JSON 的方法包括:使用編程語(yǔ)言(如 Python、Java、C#)編寫(xiě)腳本或程序進(jìn)行轉(zhuǎn)換;使用在線工具(如 XML 轉(zhuǎn)換為 JSON、Gojko's XML 轉(zhuǎn)換器、XML 在線工具)粘貼或上傳 XML 數(shù)據(jù)并選擇 JSON 格式輸出;使用 XML 到 JSON 轉(zhuǎn)換器(如 Oxygen XML Editor、Stylus Studio、Altova XMLSpy)執(zhí)行轉(zhuǎn)換任務(wù);使用 XSLT 樣式表將 XML 轉(zhuǎn)換為 JSON;使用數(shù)據(jù)集成工具(如 Informatic

C# 多線程編程是一種讓程序同時(shí)執(zhí)行多項(xiàng)任務(wù)的技術(shù),它可以通過(guò)提升性能、提高響應(yīng)能力和實(shí)現(xiàn)并行處理來(lái)提高程序效率。雖然 Thread 類提供了直接創(chuàng)建線程的方法,但 Task 和 async/await 等高級(jí)工具可以提供更安全的異步操作和更簡(jiǎn)潔的代碼結(jié)構(gòu)。多線程編程中常見(jiàn)的難題包括死鎖、競(jìng)態(tài)條件和資源泄漏,需要仔細(xì)設(shè)計(jì)線程模型和使用適當(dāng)?shù)耐綑C(jī)制來(lái)避免這些問(wèn)題。

如何利用.NET構(gòu)建應(yīng)用?使用.NET構(gòu)建應(yīng)用可以通過(guò)以下步驟實(shí)現(xiàn):1)了解.NET基礎(chǔ)知識(shí),包括C#語(yǔ)言和跨平臺(tái)開(kāi)發(fā)支持;2)學(xué)習(xí)核心概念,如.NET生態(tài)系統(tǒng)的組件和工作原理;3)掌握基本和高級(jí)用法,從簡(jiǎn)單控制臺(tái)應(yīng)用到復(fù)雜的WebAPI和數(shù)據(jù)庫(kù)操作;4)熟悉常見(jiàn)錯(cuò)誤與調(diào)試技巧,如配置和數(shù)據(jù)庫(kù)連接問(wèn)題;5)應(yīng)用性能優(yōu)化與最佳實(shí)踐,如異步編程和緩存。

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.
