不能反序列化非公共代理

项目采用序列化数据存储技术,对Class2对象进行序列化和反序列化操作时,序列化正常但反序列化失败,报错“不能反序列化非公共的代理”。经测试,将事件代理的访问属性从private改为public后,问题得到解决。

项目中用到序列化数据存储的技术:

[System.Serializable]
internal class Class1
{
    ....
    byte[] m_Data;
    internal byte[] Data
    {
        get
        {
            return m_Data;
        }
        set
        {
            m_Data=(byte[])value.Clone();
            IsChanged=true;
        }
    }
    internal event System.EventHandler DataChanged;
    private bool IsChanged
    {
        set
        {
            if(value&&DataChanged!=null)
                DataChanged(this,new System.EventArgs());
        }
    }
}

[System.Serializable]
internal class Class2
{
    ...
  private Class1 m_class1;
  internal Class1 class1
  {
   get
   {
    if(this.m_class1==null)
    {
     this.m_class1=new Class1();
     this.m_class1.DataChanged+=new EventHandler(this.DataIsChanged);
    }
    return this.m_class1;
   }
  }

  private void DataIsChanged(object sender,System.EventArgs e)
  {
     this.IsChanged=true;
  }
    ...
}


在应用中,要对Class2的对象进行序列化和反序列化操作,结果,序列化正确,反序列化失败,报告“不能反序列化非公共的代理”,经过测试,把事件代理:
  private void DataIsChanged(object sender,System.EventArgs e)
  {
     this.IsChanged=true;
  }
的访问属性修改为:
  public void DataIsChanged(object sender,System.EventArgs e)
  {
     this.IsChanged=true;
  }
后,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值