C# 将WinForms按钮标记为可序列化

C# 将WinForms按钮标记为可序列化,c#,winforms,serialization,C#,Winforms,Serialization,这是我的第一个序列化程序 尝试序列化按钮控件时出错 public Form1() { InitializeComponent(); CheckSerialization(); Button btn = btnSerialized; } public void CheckSerialization() { Stream write = File.OpenWrite(@"C:\ser.bin");

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

尝试序列化按钮控件时出错

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中的类型“System.Windows.Forms.Button”System.Windows.Forms,Version=4.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”标记为可序列化**


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

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

查找类似于
公共分部类Form1:Form的行。
。 在它的正上方,放置
[Serializable]
。这会将您的类标记为序列化。 但是,您需要控制自己的序列化,因为如下所述,UI对象不会序列化。为此,请查看接口


有关SerializableAttribute的详细信息如下。

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

如果您试图导出对象或使用用户提供的属性值重新加载对象以实现动态性,那么为什么不使用System.Reflection呢。此处:

检查此项-这可能会有所帮助-代理序列化-