最近开发一个软件,就是在运行时放自定义的控件到panel中然后想把panel上的这些控件保存到一个arraylist,再存到一个文件中(到时候可以读取文件并还原这个panel中所有控件),但是保存时出现一个我无法解决的问题:
因为自定义的控件有的继承自UserControl,有的继承自PictureBox而这些控件也加上了[Serializable],但是保存时提示"UserControl和PictureBox未标记为可序列化!!!
这个问题怎么解决?或是思路有误?
我还有一个解决办法就是把panel上的控件的属性读取后存到一个对象中再保存为文件,这样可以实现,但我想直接保存这些控件!
------解决思路----------------------
PictureBox不支持Serializable呗
------解决思路----------------------
可序列化的一般都是数据吧, 控件太复杂了,它们之间关系太乱.
------解决思路----------------------
你可以把字符串或Image序列化,不要企图序列化整个控件
------解决思路----------------------
读取文件信息发序列化为对象
protected void Button2_Click(object sender, EventArgs e)
{
string fileName = Server.MapPath("~/File/SerializeFile.txt");
Stream fs = new FileStream(fileName, FileMode.Open);
IFormatter format = new BinaryFormatter();
UserInfo user = (UserInfo)format.Deserialize(fs);
Response.Write(user.UserName);
fs.Close();
}
------解决思路----------------------
可以用反射读取属性,你可以提供一个属性列表。
PictureBox的某些属性是无法序列化,序列化也没有意义,比如Handle,这个每次都是操作系统分配的,怎么序列化呢。