繁体   English   中英

如何序列化和反序列化TabControl C#

[英]How to serialize and deserialize tabcontrol c#

我正在使用我要序列化并保存的tabcontrol。 我正在使用此代码,但它给出了tabcontrol类未标记为serializable的信息。 如何将其标记为可序列化,因为我无法覆盖该类。 怎么做 ?

using (Stream stream = File.Open("data.dat", FileMode.Create))
{
    BinaryFormatter bin = new BinaryFormatter();
    bin.Serialize(stream,tabControl1);
}

它给出了这个错误

System.Windows.Forms.TabControl未标记为可序列化

为什么不序列化控件,还有替代方法吗?

如果序列化控件,则存在一些问题:

  1. 您无法执行此操作,因为System.Windows.Forms.TabControl没有像您看到的那样被标记为可序列化。
  2. 如果您愿意并且仅在允许的情况下这样做,那么会从上面的类继承而来的有很多属性和类,接口,事件等被其序列化,而这并不是您想要的。

    在此处输入图片说明

唯一的方法是创建一个新类,将所有要保存的值与属性绑定并序列化该类。

[Serializable] // don't forget this! It will mark your class so you can serialize it.
public class BindingClass // p.s.: give this a better name!
{
    public string Text { get; set; } // Bind whit a control of your tab control.
    public float Number { get; set; }
    public string ImageLocation { get; set; } // used for the image
    public IEnumerable<object> ListOfString { get; set; } // used for a list
}

代码示例

文字和数字

文本和数字很容易。 您可以强化自己的课程,并可以与之捆绑。 之后,您可以序列化它。 一个例子:

BindingClass bc = new BindingClass();
bc.Text = textBox1.Text;
bc.Number = numbericUpDown.Value;

using (Stream stream = File.Open("data.dat", FileMode.Create))
{
    BinaryFormatter bin = new BinaryFormatter();
    bin.Serialize(stream, bc);
}

图片

对于图像来说有点复杂。 您可以序列化映像,但是这样做也不是一件坏事。 更好的方法是将图像保存在项目的bin/debug文件夹中,并序列化该图像的路径。 一个例子:

string imageLocation = Application.StartupPath + @"\myImage.jpg"
pictureBox1.Image.Save(imageLocation, ImageFormat.Jpeg);

// declare bc like code above.
bc.ImageLocation = imageLocation;

// serialize bc.

如果文件中已存在该图像,则可以覆盖它。 但是,如果您要处理历史记录,那不是一件好事...您可以通过使用当前日期时间作为文件名来解决它! 使用以下方法更改代码:

string imageLocation = Application.StartupPath +
                       DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg"

注意:您还可以使用AzureAmazon之类的Blob服务(并非免费),或将图像上传到ImgurFlickr或9gag (免费) 请注意,客户端和服务器之间必须存在Internet连接。 您可以通过在Google上搜索如何上传来进行上传。

字符串清单

对于字符串列表,您可以使用以下命令:

bc.ListOfString = comboBox1.Items;

注意

我还没有测试代码。 因此,如果您有一个问题,示例将对其进行注释,我将进行研究,但也请尝试在Google上解决您的问题。 自己尝试,这是学习的最佳方式...

序列化的替代方法(16年6月16日更新)

序列化是一种使人们无法阅读代码的保存方法。 但是,如果扩展应用程序,可能会带来问题。 Microsoft Word也会发生此问题。 旧的.doc文件也是序列化的代码,新的.docx文件是压缩的xml文件,现在,制作.docx文件更加容易。

JsonXML是不错的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM