接下来,实现Voucher类的反序列化,代码如下:

BinaryFormatter序列化实例(二)public Voucher Deserialize(string filename)
{
BinaryFormatter序列化实例(二)    BinaryFormatter formatter 
= new BinaryFormatter();
BinaryFormatter序列化实例(二)    Voucher voucher 
= null;
BinaryFormatter序列化实例(二)    FileStream fs 
= new FileStream(filename, FileMode.Open);
BinaryFormatter序列化实例(二)    
BinaryFormatter序列化实例(二)    
try
{
BinaryFormatter序列化实例(二)        voucher 
= (Voucher)formatter.Deserialize(fs);                
BinaryFormatter序列化实例(二)    }

BinaryFormatter序列化实例(二)    
finally
{
BinaryFormatter序列化实例(二)        fs.Close();
BinaryFormatter序列化实例(二)    }

BinaryFormatter序列化实例(二)
BinaryFormatter序列化实例(二)    
return voucher;
BinaryFormatter序列化实例(二)}

  创建FileStream的代码没有放到try块中,因为如果文件不存在,new FileStream会抛出异常,并不会造成资源的丢失。此后的formatter.Deserialize也没有处理异常,这是因为Deserialize本身无法确定发生导常时该如何处理,它只要保证需要释放的资源都被释放。在实际的Library开发中,try...finally的应用比try...catch要多得多。
  同样,添加NUnit的测试方法:
BinaryFormatter序列化实例(二)[Test]
BinaryFormatter序列化实例(二)
public void TestDeserializeVoucher()
{
BinaryFormatter序列化实例(二)    VoucherSerializer serializer 
= new VoucherSerializer();
BinaryFormatter序列化实例(二)    Voucher voucher 
= serializer.Deserialize("voucher.dat");
BinaryFormatter序列化实例(二)
BinaryFormatter序列化实例(二)    Assert.AreEqual(voucher.VoucherId, 
"2005012900001");
BinaryFormatter序列化实例(二)    Assert.AreEqual(voucher.Creator, 
"xingd");
BinaryFormatter序列化实例(二)}

  运行NUnit GUI,测试通过。

相关文章:

  • 2022-02-07
  • 2021-06-24
  • 2021-10-09
  • 2022-02-24
  • 2021-05-17
  • 2022-12-23
  • 2021-08-09
猜你喜欢
  • 2021-11-15
  • 2022-03-05
  • 2021-07-03
  • 2022-02-22
  • 2022-12-23
  • 2021-08-21
相关资源
相似解决方案