亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

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

2020-01-24 02:10:17
字體:
來源:轉載
供稿:網友

本文實例講述了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這個對象,傳輸給對方的電腦?,F在沒有對方的電腦,那我就在自己的電腦上模擬一下:現在通過一個流將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#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩视频一区| 色多多国产成人永久免费网站| 欧美国产日本高清在线| 亚洲精品成人久久久| 日韩视频免费观看| 国产精品免费久久久久影院| 欧美在线一级va免费观看| 欧美专区在线播放| 亚洲精品国产品国语在线| 久久在精品线影院精品国产| 国产精品高潮呻吟久久av野狼| 久久精品国产成人| 亚洲国产三级网| 91精品久久久久久久久久久久久久| 中文字幕亚洲专区| 另类天堂视频在线观看| 日韩成人在线播放| 精品中文字幕在线| 亚洲人成电影网站色…| 日本一区二区在线免费播放| 亚洲成人aaa| 国产精品自拍视频| 欧美成人激情视频免费观看| 欧美成人午夜激情| 久久久精品电影| 欧美巨大黑人极品精男| 亚洲精品成人久久| 中文字幕亚洲一区二区三区| 日韩国产一区三区| 国产精品久久婷婷六月丁香| 激情成人在线视频| 视频一区视频二区国产精品| 亚洲精品aⅴ中文字幕乱码| 久久精品电影网站| 97免费在线视频| 欧美精品在线看| 成人啪啪免费看| 日韩亚洲欧美中文高清在线| 国产欧美精品久久久| 亚洲无亚洲人成网站77777| 日韩不卡中文字幕| 欧美日韩国产精品一区二区三区四区| 欧美视频中文在线看| 日本精品性网站在线观看| 久久久91精品| 久久久久久久一区二区| 欧美日韩国产中文精品字幕自在自线| 亚洲国产欧美一区二区三区同亚洲| 国产成人黄色av| 国产一区二区三区在线播放免费观看| 俺去亚洲欧洲欧美日韩| 欧美激情在线播放| 色系列之999| 国产精品尤物福利片在线观看| 在线成人中文字幕| 上原亚衣av一区二区三区| 日韩欧美国产成人| 久久久国产视频| 98午夜经典影视| 欧美性xxxx极品hd满灌| 欧美在线激情视频| 国产国语刺激对白av不卡| 国产精品美女在线观看| 国产一区二区在线播放| 精品无码久久久久久国产| 国产成人亚洲综合青青| 不卡av在线播放| 日韩视频在线免费观看| 日韩欧美国产视频| 欧美日本高清一区| 欧美日韩亚洲一区二区三区| 九九热最新视频//这里只有精品| 成人高清视频观看www| 欧美日韩国产一区中文午夜| 亚洲欧美www| 亚洲国产一区自拍| 日韩成人av在线| 欧美裸体xxxx极品少妇软件| 一本色道久久88综合日韩精品| 中文字幕不卡av| 亚洲午夜国产成人av电影男同| 亚洲影院色无极综合| 国产999精品视频| 91国产精品电影| 亚洲一区二区三区在线免费观看| 91热精品视频| 欧美在线视频一区二区| 亚洲国产精品电影| 国产精品对白刺激| 日本精品中文字幕| 欧美老女人xx| 中日韩美女免费视频网址在线观看| 久久人人爽人人爽人人片av高清| 精品二区三区线观看| 欧美亚洲另类视频| 亚洲视屏在线播放| 岛国av一区二区在线在线观看| 欧美视频在线视频| 日韩成人网免费视频| 欧美大片va欧美在线播放| 777国产偷窥盗摄精品视频| 久久亚洲电影天堂| 欧美精品一区二区免费| 91精品久久久久久久久久| 成人免费xxxxx在线观看| 精品久久久久久亚洲国产300| 亚洲欧美国产制服动漫| 欧美精品国产精品日韩精品| 国产在线久久久| 成人妇女淫片aaaa视频| 精品网站999www| 中文字幕av一区二区三区谷原希美| 不用播放器成人网| 1769国产精品| 亚洲精品之草原avav久久| 亚州国产精品久久久| 亚洲精品久久久久中文字幕二区| 亚洲国产成人在线播放| 91人成网站www| 亚洲男女性事视频| 日韩中文字幕国产精品| 7777精品久久久久久| 日本不卡免费高清视频| 国产欧美一区二区三区久久| 久久精品久久久久久国产 免费| 91麻豆桃色免费看| 日韩激情av在线免费观看| 欧美国产中文字幕| 亚洲成人网久久久| 视频在线观看一区二区| 久久久这里只有精品视频| 国产一区深夜福利| 国产精品视频久久久久| 亚洲丝袜在线视频| 美日韩精品视频免费看| 色小说视频一区| 91久久久久久国产精品| 亚洲成人免费在线视频| 国产精品视频免费观看www| 国产精品欧美日韩一区二区| 在线日韩第一页| 亚洲人成电影网站| 按摩亚洲人久久| 日韩av电影院| 一本久久综合亚洲鲁鲁| 亚洲国内精品在线| 国产一区二区三区在线播放免费观看| 成人免费观看49www在线观看| 97香蕉久久超级碰碰高清版| 精品成人国产在线观看男人呻吟| 欧美日韩黄色大片| 啪一啪鲁一鲁2019在线视频| 国产综合久久久久| 亚洲精品国偷自产在线99热| 91精品国产乱码久久久久久蜜臀| 亚洲欧美日韩视频一区| 日韩人体视频一二区| 欧美电影免费看| 91免费在线视频网站| 久久久久中文字幕2018| 国产99久久精品一区二区 夜夜躁日日躁| 欧美做爰性生交视频| 国产日韩在线一区| 日韩成人中文电影|