对像在序列化时一个奇怪的问题

jbo126 2010-08-27 07:47:27
我定义好了一个类型:Document,它的每个实例在一个对应的子窗口中进度编辑,然后用BinaryFormatter序列化到文件!以前没什么问题,但今天突然在保存(即序列化)的时候提示我说这个程序集的ChildForm(即我的子窗口的类型)类型未被标记为可序列化!

郁闷了一天,终于找到了点头绪:如果我在子窗口中关联的Document对象的某个事件的事件处理程序,就会出现上述问题,比如:在子窗口的Load事件中
...
Document doc=new Document();
doc.SavedChanged+=new EventHandler(doc_SavedChanged);
...

private void doc_SavedChanged(object sender,EventArgs e)
{
.....
}


只要不在子窗口中关联Document类型的事件处理程序,那将这个类型的实例序列化时就不会出现上面提到过的问题!怎么回事呢?
...全文
171 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjh200102 2010-08-31
  • 打赏
  • 举报
回复
跟进。。
jbo126 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 computerfox 的回复:]
问题不出在你是否在子窗口中处理,而是你在子窗口中怎么处理的。把详细的源码贴出来,或者,你自己单步调试,定位问题。
阿捷
[/Quote]


关于事件上面的几个回复差不多了,现在我按上面几位同志的意见解决了,可现在又出了新的问题:

我通过BindingSource来将Document和DataGridView控件绑定:
现在有时候它会提示我类型BindingSource未被标记为可序列化!这个比较麻烦!因为有时提示有时不提示!在上个问题上我好呆知道和事件的关联有关,但这个我却不知道怎么弄!

还是下次吧,下次我再把代码贴出来!!
特别 2010-08-29
  • 打赏
  • 举报
回复

Document类的
SavedChanged事件的上一行
加上
[NonSerialized()]试试
需要引用System.Runtime.Serialization
捷哥1999 2010-08-29
  • 打赏
  • 举报
回复
问题不出在你是否在子窗口中处理,而是你在子窗口中怎么处理的。把详细的源码贴出来,或者,你自己单步调试,定位问题。
lijinnl 2010-08-29
  • 打赏
  • 举报
回复
从CONTROL继承下来的都不可以序列化,如没有的话想序列化则需整个类加入Serializable。
studentliudong 2010-08-27
  • 打赏
  • 举报
回复
不会帮顶
bloodish 2010-08-27
  • 打赏
  • 举报
回复
序列化之前取消事件注册即可
doc.SavedChanged-=new EventHandler(doc_SavedChanged);

也可按1楼方法处理
jbo126 2010-08-27
  • 打赏
  • 举报
回复
三楼的能不能详细点!我对序列化以前接触并不多!
jbo126 2010-08-27
  • 打赏
  • 举报
回复
1楼的,那这样的话不是所有的事件都要加这个Attribute了吗?
wuyq11 2010-08-27
  • 打赏
  • 举报
回复
Serializable
EventHandler 委托
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate void EventHandler (
Object sender,
EventArgs e
)
porschev 2010-08-27
  • 打赏
  • 举报
回复
路过。。。
gomoku 2010-08-27
  • 打赏
  • 举报
回复
[field:NonSerializedAttribute()]   //<--
EventHandler SavedChanged;


见:http://msdn.microsoft.com/zh-cn/library/system.nonserializedattribute.aspx

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧