2015-04-21 66 views
0

我正在编写序列化和反序列化的程序。但我的程序正在抛出异常,因为如何在C#中执行序列化和反序列化?

试图反序列化一个空的流。 在行“mp =(employee)bfr.Deserialize(s);”

我不明白我的程序有什么问题。

这里是我的代码

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Runtime.Serialization; 
using System.Runtime.Serialization.Formatters.Binary; 

namespace serializationDemo 
{ 
    [Serializable()] 
public class employee : ISerializable 
    { 
    public int empid; 
    public string empname; 

     public employee() 
     { 
      empid=0; 
      empname = null; 
     } 
     public employee(SerializationInfo info,StreamingContext ctxt) 
     { 
      empid =(int)info.GetValue("EmployeeId",typeof(int)); 
      empname = (string)info.GetValue("EmployeeName",typeof(string)); 
     } 

    public void GetObjectData(SerializationInfo info, StreamingContext ctxt) 
    { 
     info.AddValue("EmployeeId",empid); 
     info.AddValue("EmployeeName", empname); 
    } 
    } 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
     employee mp = new employee(); 
     mp.empid = 10; 
     mp.empname = "Waseem"; 

     Stream s = File.Open("employee.osi", FileMode.Create); 
     BinaryFormatter bfr = new BinaryFormatter(); 
     Console.WriteLine("\nWritting employee information..."); 
     bfr.Serialize(s,mp); 

     s.Close(); 

     mp = null; 


      s = File.Open("employee.osi", FileMode.Create); 
      bfr = new BinaryFormatter(); 
      mp = (employee)bfr.Deserialize(s); 
      s.Close(); 

     Console.WriteLine("Employee ID={0}", mp.empid.ToString()); 
     Console.WriteLine("Employee Name={0}", mp.empname); 
     Console.ReadKey(); 
    } 
} 
} 

回答

0

FileMode.Create将删除该文件,如果它已经存在。你需要Open

+0

谢谢soo @SLaks。 –