C# 資料的序列化存取

來源:互聯網
上載者:User

標籤:des   style   blog   io   ar   color   os   使用   sp   

1,什麼是序列化?

  序列化 (Serialization)將對象的狀態資訊轉換為可以儲存或傳輸的形式的過程。在序列化期間,對象將其目前狀態寫入到臨時或持久性儲存區。以後,可以通過從儲存區中讀取或還原序列化對象的狀態,重新建立該對象。序列化使其他代碼可以查看或修改那些不序列化便無法訪問的對象執行個體資料。確切地說,代碼執行序列化需要特殊的許可權:即指定了 SerializationFormatter 標誌的 SecurityPermission。在預設策略下,通過 Internet 下載的代碼或 Intranet 代碼不會授予該許可權;只有本機電腦上的代碼才被授予該許可權。

2.為什麼使用序列化

a. 一個原因是將對象的狀態保持在儲存媒體中,以便可以在以後重新建立精確的副本。我們經常需要將對象的欄位值儲存到磁碟 中,並在以後檢索此資料。儘管不使用序列化也能完成這項工作,但這種方法通常很繁瑣而且容易出錯,並且在需要跟蹤對象的階層時,會變得越來越複雜。可 以想象一下編寫包含大量對象的大型商務應用程式的情形,程式員不得不為每一個對象編寫代碼,以便將欄位和屬性儲存至磁碟以及從磁碟還原這些欄位和屬性。序列化提供了輕鬆實現這個目標的快捷方法。

b.另一個原因是通過值將對象從一個應用程式定義域發送到另一個應用程式定義域中。例如,序列化可用於在 ASP.NET 中儲存工作階段狀態並將對象複製到 Windows 表單的剪貼簿中。遠端還可以使用序列化通過值將對象從一個應用程式定義域傳遞到另一個應用程式定義域中。

(序列化技術的主要兩個目的是:持久化存儲按值封送資料保護。)

3怎樣進行序列化和還原序列化?

a .XML序列化
添加System.Runtime.Serialization.Formatters.Binary命名空間;
b. 二進位序列化
添加System.Xml.Serialization命名空間;
NoSerialized屬性被Xmllgnore屬性替代;
c.soap序列化
典型應用:web service.

 

下面看一下二進位序列化:

 

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;using System.Text;using System.Threading.Tasks;namespace serial1{    /// <summary>    /// Person類的序列化    /// </summary>    [Serializable]    public class Person    {        public string Sno { get; set; }        public string Name { get; set; }        public string Sex { get; set; }        public int Age { get; set; }        public string Other { get; set; }        //非序列化的屬性        [NonSerialized]        public string NoSerial;        /// <summary>        /// 成員函數        /// </summary>        /// <returns></returns>        public string DisplayInfo()        {            return "我的學號是:" + Sno + "\n我的名字是:" + Name + "\n我的性別為:" + Sex + "\n我的年齡:" + Age + "\n非序列化:" + NoSerial+"\n";        }    }    class Program    {        static void Main(string[] args)        {            //執行個體化兩個對象            var me = new Person            {                Sno = "1215115231",                Name = "wuzhang",                Sex = "man",                Age = 22,                NoSerial="不被序列化1",                Other = "\n"            };            var he = new Person            {                Sno = "1215115250",                Name = "wanggang",                Sex = "man",                Age = 21,                NoSerial = "不被序列化2",                Other = "\n"            };            List<Person> personInfo = new List<Person>();            personInfo.Add(me);            personInfo.Add(he);            //建立一個格式化程式的執行個體            IFormatter formatter = new BinaryFormatter();            //建立一個檔案流            if (!File.Exists("F:\\TestTxt.txt"))            {                //FileStream fs1 = new FileStream("F:\\TestTxt.txt", FileMode.Create, FileAccess.Write);//建立寫入檔案                 Stream stream = new FileStream("F:\\TestTxt.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);                foreach(Person per in personInfo)                {                    formatter.Serialize(stream, per);                }                stream.Close();            }            else            {                Stream stream = new FileStream("F:\\TestTxt.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);                foreach (Person per in personInfo)                {                    formatter.Serialize(stream, per);                }                stream.Close();            }           Stream destream = new FileStream("F:\\TestTxt.txt", FileMode.Open,           FileAccess.Read, FileShare.Read);           var stillme = (Person)formatter.Deserialize(destream);           var stillme1 = (Person)formatter.Deserialize(destream);           Console.WriteLine(stillme.DisplayInfo());           Console.WriteLine(stillme1.DisplayInfo());           destream.Close();           Console.ReadLine();        }    }}

 

 

 

運行結果:

 

其它兩種方式就不再實驗了,搞定!

 

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.