将WinForms Button标记为可序列化

ctehm74n  于 2023-10-23  发布在  其他
关注(0)|答案(4)|浏览(107)

这是我的第一个序列化程序。
尝试序列化按钮控件时出错。

public Form1()
{
     InitializeComponent();
     CheckSerialization();                
     Button btn = btnSerialized;            
}

public void CheckSerialization()
{
     Stream write = File.OpenWrite(@"C:\ser.bin");
     BinaryFormatter serial = new BinaryFormatter();
     serial.Serialize(write, btnSerialized);
     write.Close();
}

private void btnSerialized_Click(object sender, EventArgs e)
{
     FileStream fs = new FileStream(@"C:\ser.bin",FileMode.Open);
     BinaryFormatter bf= new BinaryFormatter();
     object obj = bf.Deserialize(fs);
     Button button12 = (Button)obj;
     button1 = button12;
     button1.Location = new Point(0, 0);
}

程序集"System.Windows.Forms,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089“中的类型”System. Windows.Forms.Button“未标记为可序列化。**
如何将此对象标记为可序列化?

e4yzc0pl

e4yzc0pl1#

必须将类型标记为可序列化,而不是对象。

pokxtpni

pokxtpni2#

找到看起来像public partial class Form1 : Form的线。在它的正上方,放置[Serializable]。将类标记为序列化。但是,您需要控制自己的序列化,因为如下所述,UI对象不会序列化。查看ISerializable接口。
关于SerializableAttribute的更多信息是here

jecbmhm3

jecbmhm33#

你不能序列化Winforms对象(或者其他UI对象,一般来说)

zfciruhq

zfciruhq4#

如果你试图导出对象或重新加载对象,用户提供的动态属性值,那么你为什么不使用System.Reflection?这里:http://www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtime

相关问题