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

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

編輯:C#入門知識

C#序列化與反序列化(Serialize,Deserialize)實例詳解。本站提示廣大學習愛好者:(C#序列化與反序列化(Serialize,Deserialize)實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C#序列化與反序列化(Serialize,Deserialize)實例詳解正文


本文實例講述了C#序列化與反序列化(Serialize,Deserialize)完成辦法。分享給年夜家供年夜家參考。詳細剖析以下:

假如要保留運轉法式進程的數據要末保留到數據庫中,要末新建一個通俗的文件,然後把數據保留出來.然則這二者有個缺陷就是,不克不及把原稀有據的構造也保留出來.好比一個類中的字段值保留出來後再讀掏出來必需再解析下才行.序列化技巧讓你省去懂得析的進程.保留後再讀取時直接獲得一個class

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

1.BinaryFormatter

保留成二進制數據流.用法示例:

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

把數據保留成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 )簡略對象拜訪協定是在疏散或散布式的情況中交流信息的簡略的協定,是一個基於XML的協定,它包含四個部門:SOAP封裝(envelop),封裝界說了一個描寫新聞中的內容是甚麼,是誰發送的,誰應該接收並處置它和若何處置它們的框架;SOAP編碼規矩(encoding rules),用於表現運用法式須要應用的數據類型的實例; SOAP RPC表現(RPC representation),表現長途進程挪用和應對的協議;SOAP綁定(binding),應用底層協定交流信息。

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#法式設計有所贊助。

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