当前位置:   article > 正文

C#自定义序列化反序列化,序列化Form_c# 序列化整个form

c# 序列化整个form

在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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

需要注意的点:
1、比如代码示例,想要序列化官方的TextBox是不行的,需要自己写一个继承TextBox添加[Serializable]并如上实现ISerializable和构造方法。
2、由于手写序列化反序列化麻烦,可用反射获取和赋值子控件以及属性

判断是否可被序列化:typeof(T).IsSerializable

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/111834
推荐阅读
相关标签
  

闽ICP备14008679号