/*
* 单例类 序列化
*
*
*/
/// <summary>
/// 该类为单例类,即整个域中只应该现在一个实例,因此在反序列化中要考虑不能创建多个实例
/// </summary>
[Serializable]
public class SingletonSerialization: ISerializable
{
private static readonly SingletonSerialization _theOneObject = new SingletonSerialization();
public string strName = "ABC";
public DateTime date = DateTime.Now;
private SingletonSerialization() { }
public static SingletonSerialization GetSingleton()
{
return _theOneObject;
}
//该类不需要定义SingletonSerialization(SerializationInfo info, StreamingContext context)构造函数,因为永远不会调用它
#region ISerializable 成员
[SecurityPermissionAttribute( SecurityAction.Demand, SerializationFormatter = true)]
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.SetType(typeof(SingletonSerializationHelper));
//该方法没有添加任何值,只是对序列化信息对象赋了一个类型,相当于做了一个伪装。
//告诉序列化器,我要序列化的对象不是SingletonSerialization类而是SingletonSerializationHelper类
}
#endregion
}
// 继续IObjectReference接口表示,当前类为某一真实对象的引用
public sealed class SingletonSerializationHelper : IObjectReference
{
#region IObjectReference 成员
//当序列化器发现该类继续IObjectReference接口时,会自动调用该方法
object IObjectReference.GetRealObject(StreamingContext context)
{
return SingletonSerialization.GetSingleton();
}
#endregion
}