C# Form序列化

对什么序列化无关紧要,但是,如果将要被序列化的对象不支持序列化(即使指定了Serializable),那么这个对象一定要实现自定义序列化,还是拿Form来说吧,它是不支持序列化的,那么对它进行如下的修改后就可以被序列化了,其它的类也类似操作:

--------将要被序列化的类,这里以Form为代表--------
using   System;
using   System.Collections.Generic;
using   System.Text;
using   System.Windows.Forms;
using   System.Runtime.Serialization;
using   System.Drawing;

namespace   SerializableApp
{
///   <summary>
///   这里要添加对序列化的支持
///   </summary>
[Serializable]
public   class   SerializableForm   :   Form,   ISerializable
{
///   <summary>
///   常规构造函数
///   </summary>
public   SerializableForm()
{

}
///   <summary>
///   反序列化构造函数
///   </summary>
///   <param   name= "info "> </param>
///   <param   name= "context "> </param>
public   SerializableForm(SerializationInfo   info,   StreamingContext   context)
{
this.Name   =   info.GetString( "Name ");
this.Size   =   (Size)info.GetValue( "Size ",   typeof(Size));
this.Location   =   (Point)info.GetValue( "Location ",   typeof(Point));
}
///   <summary>
///   自定义序列化方法
///   </summary>
///   <param   name= "info "> </param>
///   <param   name= "context "> </param>
public   void   GetObjectData(SerializationInfo   info,   StreamingContext   context)
{
info.AddValue( "Name ",   this.Name);
info.AddValue( "Size ",   this.Size);
info.AddValue( "Location ",   this.Location);
}
}
}

--------------对序列化的测试----------------
//为了方便测试定义内存流
MemoryStream   ms   =   new   MemoryStream();
BinaryFormatter   form   =   new   BinaryFormatter();

Type   type   =   typeof(SerializableForm);
object   obj   =   Activator.CreateInstance(type);
//对对象进行序列化
form.Serialize(ms,   obj);
ms.Flush();
//获取流中的数据以便反序列化
byte[]   bts   =   ms.GetBuffer();

//反序列化操作
MemoryStream   _ms   =   new   MemoryStream(bts);
//生成反序列化后的对象
object   ff   =   form.Deserialize(_ms);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值