最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

1.BinaryFormatter

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

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
//如果要想保存某個class中的字段,必須在class前面加個這樣attribute(C#里面用中括號括起來的標志符)
public class Person
{
public int age;
public string name;
[NonSerialized] //如果某個字段不想被保存,則加個這樣的標志
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);
//反序列化得到的是一個object對象.必須做下類型轉換
stream.Close();
Console.WriteLine(person.age + person.name + person.secret);
//結果為18tom.因為secret沒有有被序列化.
}

2.SoapFormatter

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

把文件名改為person.xml

另外就是添加名稱空間:using System.Runtime.Serialization.Formatters.Soap;
這個名稱空調對就的程序集有時VS沒有自動引用.你必須手動去引用.選中project,右擊選擇Add Reference.在.NET的標簽下選擇

System.Runtime.Serialization.Formatters.Soap.然后點OK.

補充:SOAP(Simple Object Access Protocol )簡單對象訪問協(xié)議是在分散或分布式的環(huán)境中交換信息的簡單的協(xié)議,是一個基于XML的協(xié)議,它包括四個部分:SOAP封裝(envelop),封裝定義了一個描述消息中的內容是什么,是誰發(fā)送的,誰應當接受并處理它以及如何處理它們的框架;SOAP編碼規(guī)則(encoding rules),用于表示應用程序需要使用的數(shù)據(jù)類型的實例; SOAP RPC表示(RPC representation),表示遠程過程調用和應答的協(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#程序設計有所幫助。

相關文章

  • C# 中類型轉換方式之顯式轉換和 as 運算符

    C# 中類型轉換方式之顯式轉換和 as 運算符

    在 C# 中,有兩種常見的類型轉換方式:顯式轉換和as 運算符,它們用于在不同類型之間進行轉換,以下是對這兩種轉換方式的詳細解釋和示例說明,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • C#中foreach實現(xiàn)原理詳解

    C#中foreach實現(xiàn)原理詳解

    這篇文章主要為大家詳細介紹了C#中foreach實現(xiàn)原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • C#窗體讀取EXCEL并存入SQL數(shù)據(jù)庫的方法

    C#窗體讀取EXCEL并存入SQL數(shù)據(jù)庫的方法

    這篇文章主要介紹了C#窗體讀取EXCEL并存入SQL數(shù)據(jù)庫的方法,實例簡述了實現(xiàn)讀取excel及寫入SQL數(shù)據(jù)庫的原理與技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • C#判斷程序是否是管理員權限運行的方法代碼示例

    C#判斷程序是否是管理員權限運行的方法代碼示例

    這篇文章主要介紹了C#判斷程序是否是管理員權限運行的方法代碼示例,本文直接給出實現(xiàn)代碼例子,需要的朋友可以參考下
    2015-03-03
  • Silverlight實現(xiàn)跑馬燈動畫

    Silverlight實現(xiàn)跑馬燈動畫

    這篇文章主要為大家詳細介紹了Silverlight實現(xiàn)跑馬燈動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 如何用WindowsForm給窗口添加一些簡單的動畫效果

    如何用WindowsForm給窗口添加一些簡單的動畫效果

    這篇文章主要介紹了如何用WindowsForm給窗口添加一些簡單的動畫效果,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • C#并發(fā)編程之async和await關鍵字詳解

    C#并發(fā)編程之async和await關鍵字詳解

    對于?async?和?await?兩個關鍵字,對于一線開發(fā)人員再熟悉不過了,到處都是它們的身影,下面小編就來和大家記錄匯總下它們的使用吧
    2023-07-07
  • 基于WPF實現(xiàn)帶蒙版的MessageBox消息提示框

    基于WPF實現(xiàn)帶蒙版的MessageBox消息提示框

    這篇文章主要介紹了如何利用WPF實現(xiàn)帶蒙版的MessageBox消息提示框,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,需要的可以參考一下
    2022-08-08
  • C# 文件安全管理需要注意的

    C# 文件安全管理需要注意的

    這篇文章主要介紹了C# 文件安全管理需要注意的,幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#基礎教程之類class與結構struct的區(qū)別

    C#基礎教程之類class與結構struct的區(qū)別

    struct是值類型,創(chuàng)建一個struct類型的實例被分配在棧上,class是引用類型,創(chuàng)建一個class類型實例被分配在托管堆上,下面這篇文章主要給大家介紹了關于C#基礎教程之類class與結構struct區(qū)別的相關資料,需要的朋友可以參考下
    2022-11-11

最新評論

辽阳县| 金湖县| 武乡县| 麻栗坡县| 莒南县| 常宁市| 都江堰市| 安岳县| 禄丰县| 台中市| 佛学| 景宁| 冀州市| 顺义区| 疏勒县| 九寨沟县| 双峰县| 金溪县| 衡东县| 文成县| 寿阳县| 大渡口区| 麻城市| 乐陵市| 崇文区| 道孚县| 通榆县| 苏尼特右旗| 西盟| 定陶县| 昌图县| 宕昌县| 红桥区| 陆良县| 朝阳县| 阳春市| 通道| 漳浦县| 开阳县| 巴林左旗| 陆良县|