/*
* 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);
}
}
}