序列化

二進制序列化需要的命名空間
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

二進制序列化

[Serializable]
public class Person
{
   public int age;
   piblic bool Sex
    {
      get;set;
    }
}
//序列化
 Person s=new Person();
 s.age=18;
 s.Sex=false;
 IFormatter formatter=new BinaryFormatter();//將序列化對象格式化
 Stream stream = new FileStream("E:/MyFile.txt", FileMode.Create, FileAccess.Write, FileShare.None);//用流接受內容
 fornatter.Serialize(stream,s);//序列化
 stream.close();//關閉流
//反序列化
 IFormatter formatter = new BinaryFormatter();
 Stream stream = new FileStream(@"E:/MyFile.txt",  FileMode.Open, FileAccess.Read, FileShare.Read);
 Person XiaoHong = (Person)formatter.Deserialize(stream);//反序列化
 stream.Close();
 Console.WriteLine((string.Format("年齡:{0} 性別:{1}", XiaoHong.age, XiaoHong.Sex)));
//選擇序列化
[Serializable]
    public class Person
    {
        [NonSerialized]
       public int age;//在MyFile.txt中可以隱藏age
        public bool Sex
        { get; set; }
   }
                       自定義序列化
如果使用 Serializable 屬性對某個類進行標記,且該類在類級別或對其構造函數具有聲明性或強制性安全要求,則不應對該類執行默認的序列化。相反,這樣的類應該始終實現 ISerializable 接口。
實現 ISerializable 涉及到實現 GetObjectData 方法以及反序列化對象時所用的特殊構造函數。
強調何時將 ISerializable 添加至必須同時實現 GetObjectData 和特殊構造函數的某個類,這一點很重要。如果缺少 GetObjectData,編譯器會向您發出警告。但是,鑑於無法強制實現構造函數,如果不存在該構造函數,則不會發出任何警告,但此時如果嘗試對某個類進行反序列化,將會引發異常。

 [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]——序列化可以允許其他代碼查看或修改用其他方式無法訪問的對象實例數據,本屬性就是安全訪問權限的設置。
SerializationInfo——存儲將對象序列化或反序列化所需的全部數據。
StreamingContext——描述給定的序列化流的源和目標,並提供一個由調用方定義的附加上下文。
                       XML序列化
引用using System.Runtime.Serialization.Formatters.Soap;
例如:序列化
 Person XiaoHong = new Person();
            XiaoHong.age = 18;
            XiaoHong.Sex = false;        
            IFormatter formatter = new SoapFormatter();//將序列化對象格式化
Stream stream = new FileStream("F:/MyFile.xml", FileMode.Create, FileAccess.Write, FileShare.None);//用流接受內容
            formatter.Serialize(stream, XiaoHong);//序列化對象
            stream.Close();關閉流

反序列化

IFormatter formatter = new SoapFormatter();
            Stream stream = new FileStream("F:/MyFile.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
            Person XiaoHong = (Person)formatter.Deserialize(stream);//反序列化
            stream.Close();
            MessageBox.Show(string .Format ("年齡:{0} 性別:{1}",XiaoHong .age ,XiaoHong .Sex ));
.NET Framework 提供了兩個序列化技術:
1二進制序列化保持類型保真,這對於多次調用應用程序時保持對象狀態非常有用。例如,通過將對象序列化到剪貼板,可在不同的應用程序之間共享對象。您可以將對象序列化到流、磁盤、內存和網絡等。遠程處理使用序列化,“按值”在計算機或應用程序域之間傳遞對象。
2、XML 序列化只序列化公共屬性和字段,並且不保持類型保真。當您希望提供或使用數據而不限制使用該數據的應用程序時,這一點非常有用。由於 XML 是開放式的標準,因此它對於通過 Web 共享數據來說是一個理想選擇。SOAP 同樣是開放式的標準,這使它也成爲一個理想選擇。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章