赞
踩
在WinForm中,Form及其子控件是无法序列化的,想要序列化需要自定义
1、使用[Serializable]特性标记将要被序列化的类
2、继承并实现ISerializable接口
3、添加ISerializable接口实现方法的构造方法(用于反序列化)
[Serializable] public partial class WinForm : Form, ISerializable { private 数据库连接 con = new 数据库连接(".", "EasyDevelop", "sa", "123"); public WinForm() { InitializeComponent(); } //反序列化构造方法 public WinForm(SerializationInfo info, StreamingContext context) { Name = info.GetString("Name"); textBox1 = info.GetValue("TextBox1", typeof(自定义控件_TextBox)) as 自定义控件_TextBox; } //序列化方法 public void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("Name", Name); info.AddValue("TextBox1", textBox1); } }
需要注意的点:
1、比如代码示例,想要序列化官方的TextBox是不行的,需要自己写一个继承TextBox添加[Serializable]并如上实现ISerializable和构造方法。
2、由于手写序列化反序列化麻烦,可用反射获取和赋值子控件以及属性
判断是否可被序列化:typeof(T).IsSerializable
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。