ISerializable用法(初級)

家裏只有一臺電腦,影響老婆看電視劇了。趕緊拷貝完,洗襪子去...

不解釋,看註釋。

/*
 * Created by SharpDevelop.
 * User: iwateru
 * Date: 2012/12/15
 * Time: 18:52
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.IO;
using System.Xml;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Permissions;

namespace TestISerializable
{
	/// <summary>
	/// SerialBase:繼承自ISerializable
	/// </summary>
	[Serializable]
	public class SerialBase : ISerializable
	{
		public int n1;
		public int n2;
		public String str;
		
		public SerialBase()
		{
		}
		
#region  ISerializable Members
		/// <summary>
		/// 構造函數
		/// </summary>
		/// <param name="info"></param>
		/// <param name="context"></param>
		protected SerialBase(SerializationInfo info, StreamingContext context)
		{
			n1 = info.GetInt32("n1");
			n2 = info.GetInt32("n2");
			str = info.GetString("str");
		}
		
		/// <summary>
		/// ISerializable接口函數
		/// </summary>
		/// <param name="info"></param>
		/// <param name="context"></param>
		[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
		public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
		{
			info.AddValue("n1", n1);
			info.AddValue("n2", n2);
			info.AddValue("str", str);
		}
#endregion
	}
	
	[Serializable]
	public class SerialDerived : SerialBase
	{
		public int num;
		
		public SerialDerived() : base()
		{
			
		}
#region  ISerializable Members
		/// <summary>
		/// 構造函數
		/// </summary>
		/// <param name="si"></param>
		/// <param name="context"></param>
		protected SerialDerived(SerializationInfo si, StreamingContext context) : base(si, context)
		{
			num = si.GetInt32("num");
		}
		
		/// <summary>
		/// ISerializable接口函數
		/// </summary>
		/// <param name="si"></param>
		/// <param name="context"></param>
		[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
		public override void GetObjectData(SerializationInfo si, StreamingContext context)
		{
			base.GetObjectData(si, context);
			si.AddValue("num", num);
		}
#endregion
	}
	
	class Program
	{
		/// <summary>
		/// 保存
		/// </summary>
		public static void SerializeBinary()
		{
			SerialDerived obj = new SerialDerived();
			obj.n1 = 123;
			obj.n2 = 234;
			obj.str = "dsojgoajd";
			obj.num = 333;
			FileStream stream = new FileStream("test.bin", FileMode.Create);
			BinaryFormatter b = new BinaryFormatter();
			b.Serialize(stream, obj);
			stream.Close();
		}
		
		/// <summary>
		/// 讀取
		/// </summary>
		public static void DeserializeBinary()
		{
			SerialDerived obj = new SerialDerived();
			FileStream stream = new FileStream("test.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
			BinaryFormatter b = new BinaryFormatter();
			obj = b.Deserialize(stream) as SerialDerived;
			Console.WriteLine(obj.n1);
			Console.WriteLine(obj.n2);
			Console.WriteLine(obj.str);
			Console.WriteLine(obj.num);
			stream.Close();
		}
	
		public static void Main(string[] args)
		{
			// TODO: Implement Functionality Here
			
			// 保存並且讀取爲二進制文件
			SerializeBinary();
			DeserializeBinary();
			
			Console.Write("Press any key to continue . . . ");
			Console.ReadKey(true);
		}
	}
}


 

發佈了76 篇原創文章 · 獲贊 16 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章