標籤:分頁 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#序列化與還原序列化執行個體