将WinForms按钮标记为可序列化

时间:2010-08-30 02:24:15

标签: c# winforms serialization

这是我的第一个序列化程序。

尝试序列化按钮控件时发生错误。

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);
}
  

在Assembly'System.Windows.Forms中输入'System.Windows.Forms.Button',Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'未标记为可序列化。**

如何将此对象标记为可序列化?

4 个答案:

答案 0 :(得分:2)

你没有。该类型必须标记为Serializable,而不是对象。

答案 1 :(得分:1)

找到看起来像public partial class Form1 : Form的行。 在它正上方,放置[Serializable]。这标志着你的类序列化。 但是,您需要控制自己的序列化,因为如下所述,UI对象不会序列化。为此,请查看ISerializable界面。

有关SerializableAttribute的更多信息是here

答案 2 :(得分:0)

您无法序列化Winforms对象(或其他UI对象,一般来说)

答案 3 :(得分:0)

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