我们知道单例模式是不能序列化的,会生成另一个实例,从而破坏了单例模式,在C#里,通过实现接口ISerializable,从而订制序列化,这个接口的方法的签名void GetObjectData(SerializationInfo info, StreamingContext context),这个方法必须用特性保护起来,避免被乱用,应用特性[SecurityPermission(SecurityAction.Demand,SerializationFormatter =true)]可以达到目的。具体的单例模式类是这样,单例模式采用嵌套类实现。
namespace SingletonSerializationTest
{
[Serializable]
sealed class Singeton:ISerializable
{
private string name;
public string Name { get => name; set => name = value; }
private Singeton() { }
[SecurityPermission(SecurityAction.Demand,SerializationFormatter =true)]
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.SetType(typeof(SingetonSerializationHelp));
}
public static Singeton Instance
{
get { r