如何在C#中执行序列化和反序列化?

时间:2015-04-21 17:21:06

标签: c# serialization

我正在尝试编写序列化和反序列化的程序。但我的程序正在抛出异常

  

尝试反序列化空流。   在“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();
    }
}
}

1 个答案:

答案 0 :(得分:0)

如果文件已存在,

FileMode.Create将删除该文件。你想要Open