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

C#序列化與反序列化實例

編輯:C#入門知識

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


本文實例講述了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#法式設計有所贊助。

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