/* * 单例类 序列化 * * */
/// <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 }