不能反序列化非公共代理

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

[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;
  }
后,问题解决。

posted @ 2004-06-18 08:52  无之无  阅读(667)  评论(2编辑  收藏  举报