Mega Code Archive

 
Categories / C# Tutorial / Class
 

Using the binary reader and writer for psuedo-serialization

using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.IO.Compression; using System.Net; using System.Net.Mail; using System.Runtime.InteropServices; using System.Text; struct Employee {     public string FirstName;     public string LastName;     public int Extension;     public string SocialSecurityNumber;     public bool Salaried;     public Employee(string firstName, string lastName, int extension, string ssn, bool salaried)     {         this.FirstName = firstName;         this.LastName = lastName;         this.Extension = extension;         this.SocialSecurityNumber = ssn;         this.Salaried = salaried;     }     public override string ToString()     {         return string.Format("{0}, {1}; {2}; {3}; {4}", LastName, FirstName, Extension, SocialSecurityNumber, Salaried);     } } public class MainClass {     private static List<Employee> CreateEmployees()     {         List<Employee> emps = new List<Employee>();         emps.Add(new Employee("J", "D", 3, "001-21-2232", true));         emps.Add(new Employee("G", "B", 5, "001-21-0002", true));         emps.Add(new Employee("J", "R", 9, "322-21-4321", false));         emps.Add(new Employee("B", "B", 3, "331-22-1211", true));         emps.Add(new Employee("H", "S", 9, "991-28-2777", false));         return emps;     }     private static List<Employee> DeserializeEmployees(Stream s)     {         List<Employee> employees = new List<Employee>();         BinaryReader reader = new BinaryReader(s);         try         {             while (true)             {                 Employee e = new Employee();                 e.FirstName = reader.ReadString();                 e.LastName = reader.ReadString();                 e.Extension = reader.ReadInt32();                 e.SocialSecurityNumber = reader.ReadString();                 e.Salaried = reader.ReadBoolean();                 employees.Add(e);                 Console.WriteLine("Read: {0}", e.ToString());             }         }         catch (EndOfStreamException)         {         }         return employees;     }     private static void SerializeEmployees(Stream s, IEnumerable<Employee> employees)     {         BinaryWriter writer = new BinaryWriter(s);         foreach (Employee e in employees)         {             writer.Write(e.FirstName);             writer.Write(e.LastName);             writer.Write(e.Extension);             writer.Write(e.SocialSecurityNumber);             writer.Write(e.Salaried);             Console.WriteLine("Wrote: {0}", e.ToString());         }     }     public static void Main()     {         Stream s = new MemoryStream();         IEnumerable<Employee> employees = CreateEmployees();         SerializeEmployees(s, employees);         s.Seek(0, SeekOrigin.Begin);         DeserializeEmployees(s);         s.Seek(0, SeekOrigin.Begin);         int read;         while ((read = s.ReadByte()) != -1)             Console.Write("{0:X} ", read);     } } Wrote: D, J; 3; 001-21-2232; True Wrote: B, G; 5; 001-21-0002; True Wrote: R, J; 9; 322-21-4321; False Wrote: B, B; 3; 331-22-1211; True Wrote: S, H; 9; 991-28-2777; False Read: D, J; 3; 001-21-2232; True Read: B, G; 5; 001-21-0002; True Read: R, J; 9; 322-21-4321; False Read: B, B; 3; 331-22-1211; True Read: S, H; 9; 991-28-2777; False 1 4A 1 44 3 0 0 0 B 30 30 31 2D 32 31 2D 32 32 33 32 1 1 47 1 42 5 0 0 0 B 30 30 31 2D 32 31 2D 30 3 0 30 32 1 1 4A 1 52 9 0 0 0 B 33 32 32 2D 32 31 2D 34 33 32 31 0 1 42 1 42 3 0 0 0 B 33 33 31 2D 32 32 2D 31 32 31 31 1 1 48 1 53 9 0 0 0 B 39 39 31 2D 32 38 2D 32 37 37 37 0