不能反序列化非公共代理
项目中用到序列化数据存储的技术:
[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;
}
后,问题解决。