C#序列化與還原序列化執行個體

來源:互聯網
上載者:User

標籤:分頁   tool   XML   orm   add   成功   今天   ref   還原序列化   

本文執行個體講述了C#序列化與還原序列化的方法。分享給大家供大家參考。具體分析如下:

把“對象”轉換為“位元組序列”的過程稱為對象的序列化。     把“位元組序列”恢複為“對象”的過程稱為對象的還原序列化。

序列化


代碼如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Runtime.Serialization.Formatters.Binary;

namespace 序列化與還原序列化

{

//序列化就是將對象轉換成二進位

//還原序列化就是將二進位轉換成對象

//序列化與還原序列化的作用就是:傳輸資料。

//我們在網路中傳輸資料的時候只有二進位這個形態是可以被傳輸的。也就是說我們不管在網路中傳輸什麼內容,都會先把你要傳輸的內容序列化成二進位的資料,對方接收到的同樣就是一個二進位的資料,它需要再對這個二進位的資料進行還原序列化成一個對象。

//我們要序列化一個類,第一步就要將類標記為可以被序列化的。用[Serializable]關鍵字。只有被[Serializable]標記的類建立出來的對象才能被序列化

[Serializable] //這個[Serializable]的作用是:指示一個類可以序列化。無法繼承此類。

public class Person

{

public string Name { get; set; }

public int Age{get;set;}

public char Gender{get;set;}

public Person() { }

public Person(string name, int age, char gender)

{

this.Name = name;

this.Age = age;

this.Gender = gender;

}

}

class Program

{

static void Main(string[] args)

{

//現在我們要將p這個對象,傳輸給對方的電腦。現在沒有對方的電腦,那我就在自己的電腦上類比一下:現在通過一個流將p這個對象轉換成二進位,寫到我的案頭上。然後我們再將這個二進位檔案在通過還原序列化成一個對象

Person p = new Person(“雪輝”, 25, ‘女’);

using (FileStream stream = new FileStream(@”C:\Users\凡斌\Desktop\11.txt”, System.IO.FileMode.OpenOrCreate, FileAccess.Write))

{

//開始序列化對象。開始序列化對象需要一個類

BinaryFormatter bf = new BinaryFormatter();

//public void Serialize(Stream serializationStream, object graph); 這個Serialize方法的第一個參數:是對象要序列化成的流檔案,第二個參數是:要序列化的對象

bf.Serialize(stream, p);

}

Console.WriteLine(“序列化完畢”);

}

}

}


還原序列化


代碼如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Runtime.Serialization.Formatters.Binary;

namespace 序列化與還原序列化

{

[Serializable]

public class Person

{

public string Name { get; set; }

public int Age { get; set; }

public char Gender { get; set; }

}

class Program

{

static void Main(string[] args)

{

//現在我們再將剛剛寫到案頭的二進位流檔案11.txt通過還原序列化成一個對象

using (FileStream stream2 = new FileStream(@”C:\Users\凡斌\Desktop\11.txt”, FileMode.Open, FileAccess.Read))

{

BinaryFormatter bf2 = new BinaryFormatter();

//public object Deserialize(Stream serializationStream);這個Deserialize方法的參數是:要還原序列化的二進位流檔案。它的傳回值是一個object 所有我們要將這個object強轉成Person類型。

Person p2=(Person) bf2.Deserialize(stream2);

Console.WriteLine(“方序列化成功”);

Console.WriteLine(p2.Name); //輸出:雪輝

Console.ReadKey();

}

}

}

}


序列化



將此類的一個執行個體序列化為一個檔案:

【MyFile.bin  這個檔案是把obj對象序列化後持久化儲存的檔案】


代碼如下:

MyObject obj = new MyObject();

obj.n1 = 1;

obj.n2 = 24;

obj.str = “一些字串”;

IFormatter formatter = new BinaryFormatter();

Stream MyStream = new FileStream(“MyFile.bin”, FileMode.Create,

FileAccess.Write, FileShare.None);

formatter.Serialize(MyStream, obj);

stream.Close();


還原序列化

這裡說的是將一個MyFile.bin檔案通過還原序列化,轉換成一個obj對象

【filestream 讀取這個檔案流,然後用.net的序列化器還原序列化成對象】


代碼如下:

IFormatter formatter = new BinaryFormatter();

Stream MyStream = new FileStream(“MyFile.bin”, FileMode.Open,

FileAccess.Read, FileShare.Read);

MyObject obj = (MyObject) formatter.Deserialize(MyStream);

stream.Close();


xml

將此類的執行個體序列化成一個Xml檔案


代碼如下:

XmlSerializer ser = new XmlSerializer(obj.GetType());

ser.Serialize(new FileStream(@”users.xml”, FileMode.Create), obj);


還原序列化


代碼如下:

XmlSerializer serializer = new XmlSerializer(Type.GetType(“MyObject”));

MyObject my=(MyObject)serializer.Deserialize(new FileStream(@”users.xml”,FileMode.Open));


序列化DataTable

主要是為了實現下次啟動項目的時候能讀取上次儲存的對象資訊。通俗點就是把一個對象儲存起來,在特別的時候在把這個還原出來。在C#中常見的序列化的方法主要也有三個:BinaryFormatter、SoapFormatter、XML序列化。今天涉及到的主要是XML序列化,就DataTable的內容序列化儲存。


代碼如下:

/// <summary>

/// DataTable序列化

/// </summary>

/// <param name=”dt”>需要序列化的DataTable</param>

/// <param name=”path”>路徑</param>

public void Serializer(DataTable dt,string path)

{

XmlSerializer serializer = new XmlSerializer(typeof(System.Data.DataTable));

System.Xml.XmlWriter writer= System.Xml.XmlWriter.Create(path);

serializer.Serialize(writer, dt);

}

//還原序列化

private void InitData(string filePath)

{

XmlSerializer serializer = new XmlSerializer(typeof(System.Data.DataTable));

FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None);

DataTable dt = (DataTable)serializer.Deserialize(fs);

for (int i = 0; i < dt.Rows.Count; i++)

{

int j = dgvDeviceInfo.Rows.Add();

dgvDeviceInfo.Rows[j].SetValues(dt.Rows[i][“裝置ID”].ToString(),

dt.Rows[i][“序號”].ToString(),

dt.Rows[i][“裝置名稱”].ToString(),

dt.Rows[i][“編號”].ToString(),

dt.Rows[i][“串連資訊”].ToString(),

dt.Rows[i][“備忘”].ToString(),

dt.Rows[i][“TagID”].ToString());

}

}

希望本文所述對大家的C#程式設計有所協助。

除聲明外, 跑步客文章均為原創,轉載請以連結形式標明本文地址
  C#序列化與還原序列化執行個體

本文地址:  http://www.paobuke.com/develop/c-develop/pbk23168.html






相關內容C#構建分頁應用的方法分析C#êμ??′????÷1|?üμ?ComboBoxC# 函數覆蓋總結學習(推薦)C# WinForm 判斷程式是否已經在運行,且只允許運行一個執行個體,附源碼
HighCharts圖表控制項在ASP.NET WebForm中的使用總結(全)C#實現儲存檔案時重名自動產生新檔案的方法C#使用GZipStream解壓縮資料檔案的方法winform異型不規則介面設計的實現方法

C#序列化與還原序列化執行個體

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.