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

C#序列化與反序列化(Serialize,Deserialize)實(shí)例詳解

 更新時(shí)間:2015年06月05日 11:36:56   作者:聰明的笨蛋  
這篇文章主要介紹了C#序列化與反序列化(Serialize,Deserialize)的方法,實(shí)例分析了C#序列化與反序列化的常見技巧,需要的朋友可以參考下

本文實(shí)例講述了C#序列化與反序列化(Serialize,Deserialize)實(shí)現(xiàn)方法。分享給大家供大家參考。具體分析如下:

如果要保存運(yùn)行程序過程的數(shù)據(jù)要么保存到數(shù)據(jù)庫中,要么新建一個(gè)普通的文件,然后把數(shù)據(jù)保存進(jìn)去.但是這兩者有個(gè)缺點(diǎn)就是,不能把原有數(shù)據(jù)的結(jié)構(gòu)也保存進(jìn)去.比如一個(gè)類中的字段值保存進(jìn)去后再讀取出來必須再解析下才行.序列化技術(shù)讓你省去了解析的過程.保存后再讀取時(shí)直接得到一個(gè)class

序列化的方式有三種:BinaryFormatter,SoapFormatter,XmlSerializer

1.BinaryFormatter

保存成二進(jìn)制數(shù)據(jù)流.用法示例:

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
//如果要想保存某個(gè)class中的字段,必須在class前面加個(gè)這樣attribute(C#里面用中括號括起來的標(biāo)志符)
public class Person
{
public int age;
public string name;
[NonSerialized] //如果某個(gè)字段不想被保存,則加個(gè)這樣的標(biāo)志
public string secret;
}

序列化:

classProgram
{
 staticvoid Main(string[] args)
{
Person person = newPerson();
person.age = 18;
person.name = "tom";
person.secret = "i will not tell you";
FileStream stream =newFileStream(@"c:\temp\person.dat",FileMode.Create);
BinaryFormatter bFormat =newBinaryFormatter();
bFormat.Serialize(stream, person);
stream.Close();
}

反序列化:

classProgram
{
staticvoid Main(string[] args)
{
Person person = newPerson();
FileStream stream =newFileStream(@"c:\temp\person.dat",FileMode.Open);
BinaryFormatter bFormat =newBinaryFormatter();
person = (Person)bFormat.Deserialize(stream);
//反序列化得到的是一個(gè)object對象.必須做下類型轉(zhuǎn)換
stream.Close();
Console.WriteLine(person.age + person.name + person.secret);
//結(jié)果為18tom.因?yàn)閟ecret沒有有被序列化.
}

2.SoapFormatter

把數(shù)據(jù)保存成xml文件.里面除了保存的內(nèi)容還有些額外的Soap信息.它的用法和BinaryFormatter一樣.只要把BinaryFormatter都替換成SoapFormatter就行.

把文件名改為person.xml

另外就是添加名稱空間:using System.Runtime.Serialization.Formatters.Soap;
這個(gè)名稱空調(diào)對就的程序集有時(shí)VS沒有自動(dòng)引用.你必須手動(dòng)去引用.選中project,右擊選擇Add Reference.在.NET的標(biāo)簽下選擇

System.Runtime.Serialization.Formatters.Soap.然后點(diǎn)OK.

補(bǔ)充:SOAP(Simple Object Access Protocol )簡單對象訪問協(xié)議是在分散或分布式的環(huán)境中交換信息的簡單的協(xié)議,是一個(gè)基于XML的協(xié)議,它包括四個(gè)部分:SOAP封裝(envelop),封裝定義了一個(gè)描述消息中的內(nèi)容是什么,是誰發(fā)送的,誰應(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é)議交換信息。

3.XmlSerializer

也是保存成XML文件.但沒有其他額外信息.另外它只能保存public類型的字段.而其他兩種類型能保存所以類型的字段.
這里仍使用上面的Person類.

添加名稱空間:

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

序列化:

classProgram
{
 staticvoid Main(string[] args)
{
Person person = newPerson();
person.age = 18;
person.name = "tom";
person.secret = "i will not tell you";
FileStream stream =newFileStream(@"c:\temp\xmlFormat.xml",FileMode.Create);
XmlSerializer xmlserilize = newXmlSerializer(typeof(Person));
xmlserilize.Serialize(stream, person);
stream.Close();
}

反序列化:

classProgram
{
staticvoid Main(string[] args)
{
Person person = newPerson();
FileStream stream =newFileStream(@"c:\temp\xmlFormat.xml",FileMode.Open);
XmlSerializerxmlserilize = newXmlSerializer(typeof(Person));
person = (Person)xmlserilize.Deserialize(stream);
stream.Close();
Console.WriteLine(person.age + person.name + person.secret);
}

希望本文所述對大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C#多線程學(xué)習(xí)之Thread、ThreadPool、Task、Parallel四者區(qū)別

    C#多線程學(xué)習(xí)之Thread、ThreadPool、Task、Parallel四者區(qū)別

    這篇文章主要以一些簡單的小例子,簡述多線程的發(fā)展歷程:Thread,ThreadPool,Task,Parallel。文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#多線程有一定幫助,需要的朋友可以參考一下
    2021-12-12
  • Unity中的PostProcessBuild實(shí)用案例深入解析

    Unity中的PostProcessBuild實(shí)用案例深入解析

    這篇文章主要為大家介紹了Unity中的PostProcessBuild實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • C#文件路徑操作詳細(xì)總結(jié)

    C#文件路徑操作詳細(xì)總結(jié)

    本篇文章主要是對C#中的文件路徑操作進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • Unity技術(shù)手冊之Slider滑動(dòng)器使用實(shí)例詳解

    Unity技術(shù)手冊之Slider滑動(dòng)器使用實(shí)例詳解

    這篇文章主要為大家介紹了Unity技術(shù)手冊之Slider滑動(dòng)器使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 圖文介紹c#封裝方法

    圖文介紹c#封裝方法

    在本篇內(nèi)容里小編給大家分享的是關(guān)于c#使用封裝方法以及相關(guān)知識點(diǎn),對此有需要的朋友們可以學(xué)習(xí)下。
    2018-12-12
  • C# Winform實(shí)現(xiàn)表格復(fù)制粘貼效果

    C# Winform實(shí)現(xiàn)表格復(fù)制粘貼效果

    這篇文章主要為大家學(xué)習(xí)介紹了如何通過C# Winform實(shí)現(xiàn)表格復(fù)制粘貼效果,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以了解一下
    2023-07-07
  • C#中GDI+繪制圓弧及圓角矩形等比縮放的繪制

    C#中GDI+繪制圓弧及圓角矩形等比縮放的繪制

    這篇文章主要介紹了C#中GDI+繪制圓弧及圓角矩形等比縮放的繪制,文章圍繞主題展開詳細(xì)的內(nèi)容戒殺,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • C#調(diào)用攝像頭實(shí)現(xiàn)拍照功能的示例代碼

    C#調(diào)用攝像頭實(shí)現(xiàn)拍照功能的示例代碼

    這篇文章主要介紹了C#調(diào)用攝像頭實(shí)現(xiàn)拍照功能的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Winform?控件優(yōu)化LayeredWindow無鋸齒圓角窗體

    Winform?控件優(yōu)化LayeredWindow無鋸齒圓角窗體

    這篇文章主要為大家介紹了Winform?控件優(yōu)化LayeredWindow實(shí)現(xiàn)無鋸齒圓角窗體示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • C#合并BitMap圖像生成超大bitmap

    C#合并BitMap圖像生成超大bitmap

    當(dāng)兩個(gè)圖像合并的時(shí)候,以簡單的使用gdi+,當(dāng)需要將許多bitmap合并時(shí)就會(huì)造成寬度過大,那么怎么實(shí)現(xiàn)C#合并BitMap圖像,本文就詳細(xì)的介紹一下
    2021-11-11

最新評論