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

C#序列化與反序列化實(shí)例

 更新時(shí)間:2015年01月21日 14:36:43   投稿:shichen2014  
這篇文章主要介紹了C#序列化與反序列化的實(shí)現(xiàn)方法,實(shí)例分析了序列化與反序列化的原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了C#序列化與反序列化的方法。分享給大家供大家參考。具體分析如下:

把“對(duì)象”轉(zhuǎn)換為“字節(jié)序列”的過程稱為對(duì)象的序列化。     把“字節(jié)序列”恢復(fù)為“對(duì)象”的過程稱為對(duì)象的反序列化。
序列化

復(fù)制代碼 代碼如下:
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Runtime.Serialization.Formatters.Binary; 
 
namespace 序列化與反序列化 

    //序列化就是將對(duì)象轉(zhuǎn)換成二進(jìn)制 
    //反序列化就是將二進(jìn)制轉(zhuǎn)換成對(duì)象 
 
    //序列化與反序列化的作用就是:傳輸數(shù)據(jù)。  
    //我們?cè)诰W(wǎng)絡(luò)中傳輸數(shù)據(jù)的時(shí)候只有二進(jìn)制這個(gè)形態(tài)是可以被傳輸?shù)摹R簿褪钦f我們不管在網(wǎng)絡(luò)中傳輸什么內(nèi)容,都會(huì)先把你要傳輸?shù)膬?nèi)容序列化成二進(jìn)制的數(shù)據(jù),對(duì)方接收到的同樣就是一個(gè)二進(jìn)制的數(shù)據(jù),它需要再對(duì)這個(gè)二進(jìn)制的數(shù)據(jù)進(jìn)行反序列化成一個(gè)對(duì)象。 
 
    //我們要序列化一個(gè)類,第一步就要將類標(biāo)記為可以被序列化的。用[Serializable]關(guān)鍵字。只有被[Serializable]標(biāo)記的類創(chuàng)建出來的對(duì)象才能被序列化 
 
    [Serializable] //這個(gè)[Serializable]的作用是:指示一個(gè)類可以序列化。無法繼承此類。 
    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) 
        { 
            //現(xiàn)在我們要將p這個(gè)對(duì)象,傳輸給對(duì)方的電腦?,F(xiàn)在沒有對(duì)方的電腦,那我就在自己的電腦上模擬一下:現(xiàn)在通過一個(gè)流將p這個(gè)對(duì)象轉(zhuǎn)換成二進(jìn)制,寫到我的桌面上。然后我們?cè)賹⑦@個(gè)二進(jìn)制文件在通過反序列化成一個(gè)對(duì)象 
            Person p = new Person("雪輝", 25, '女'); 
            using (FileStream stream = new FileStream(@"C:\Users\凡斌\Desktop\11.txt", System.IO.FileMode.OpenOrCreate, FileAccess.Write)) 
            {  
                //開始序列化對(duì)象。開始序列化對(duì)象需要一個(gè)類 
                BinaryFormatter bf = new BinaryFormatter(); 
 
                //public void Serialize(Stream serializationStream, object graph); 這個(gè)Serialize方法的第一個(gè)參數(shù):是對(duì)象要序列化成的流文件,第二個(gè)參數(shù)是:要序列化的對(duì)象 
                bf.Serialize(stream, p); 
            } 
            Console.WriteLine("序列化完畢"); 
        } 
    } 
}

反序列化

復(fù)制代碼 代碼如下:
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) 
        { 
            //現(xiàn)在我們?cè)賹倓倢懙阶烂娴亩M(jìn)制流文件11.txt通過反序列化成一個(gè)對(duì)象
            using (FileStream stream2 = new FileStream(@"C:\Users\凡斌\Desktop\11.txt", FileMode.Open, FileAccess.Read)) 
            { 
                BinaryFormatter bf2 = new BinaryFormatter(); 
 
                //public object Deserialize(Stream serializationStream);這個(gè)Deserialize方法的參數(shù)是:要反序列化的二進(jìn)制流文件。它的返回值是一個(gè)object 所有我們要將這個(gè)object強(qiáng)轉(zhuǎn)成Person類型。 
                Person p2=(Person) bf2.Deserialize(stream2); 
 
                Console.WriteLine("方序列化成功"); 
                Console.WriteLine(p2.Name); //輸出:雪輝 
                Console.ReadKey(); 
            } 
        } 
    } 
}

序列化  
 
將此類的一個(gè)實(shí)例序列化為一個(gè)文件: 
【MyFile.bin  這個(gè)文件是把obj對(duì)象序列化后持久化存儲(chǔ)的文件】 

復(fù)制代碼 代碼如下:
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();

反序列化  
 
這里說的是將一個(gè)MyFile.bin文件通過反序列化,轉(zhuǎn)換成一個(gè)obj對(duì)象 
【filestream 讀取這個(gè)文件流,然后用.net的序列化器反序列化成對(duì)象】 

復(fù)制代碼 代碼如下:
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

將此類的實(shí)例序列化成一個(gè)Xml文件 

復(fù)制代碼 代碼如下:
XmlSerializer ser = new XmlSerializer(obj.GetType());   
ser.Serialize(new FileStream(@"users.xml", FileMode.Create), obj);

反序列化 

復(fù)制代碼 代碼如下:
XmlSerializer serializer = new XmlSerializer(Type.GetType("MyObject"));
MyObject my=(MyObject)serializer.Deserialize(new FileStream(@"users.xml",FileMode.Open));

序列化DataTable

主要是為了實(shí)現(xiàn)下次啟動(dòng)項(xiàng)目的時(shí)候能讀取上次保存的對(duì)象信息。通俗點(diǎn)就是把一個(gè)對(duì)象保存起來,在特別的時(shí)候在把這個(gè)還原出來。在C#中常見的序列化的方法主要也有三個(gè):BinaryFormatter、SoapFormatter、XML序列化。今天涉及到的主要是XML序列化,就DataTable的內(nèi)容序列化保存。

復(fù)制代碼 代碼如下:
/// <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]["設(shè)備ID"].ToString(), 
            dt.Rows[i]["序號(hào)"].ToString(), 
            dt.Rows[i]["設(shè)備名稱"].ToString(), 
            dt.Rows[i]["編號(hào)"].ToString(), 
            dt.Rows[i]["連接信息"].ToString(), 
            dt.Rows[i]["備注"].ToString(), 
            dt.Rows[i]["TagID"].ToString()); 
    } 
}

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

呼图壁县| 都安| 贺兰县| 安庆市| 大荔县| 南平市| 深泽县| 彭泽县| 利川市| 淳安县| 尼勒克县| 恩平市| 永年县| 南溪县| 乾安县| 冕宁县| 嘉义县| 华阴市| 武鸣县| 左云县| 丹凤县| 邻水| 浦城县| 崇礼县| 阿合奇县| 安仁县| 九寨沟县| 新巴尔虎右旗| 罗源县| 绥江县| 扶风县| 黑山县| 阳谷县| 黄冈市| 东海县| 锡林郭勒盟| 昌乐县| 屏边| 常宁市| 锡林郭勒盟| 延边|