Csharp/CSharp Tutorial/File Directory Stream/Binary Formatter

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Use BinaryFormatter to Serialize an object to file

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
class Employee
{
  private int Number;
  private string FirstName;
  private string LastName;
  public void WriteEmployee(){
    Console.WriteLine("Number: " + this.Number);
    Console.WriteLine("FirstName: " + this.FirstName);
    Console.WriteLine("LastName: " + this.LastName);
  }
  public Employee(int newNumber, string newFirstName, string LastName){
    this.Number = newNumber;
    this.FirstName = newFirstName;
    this.LastName = LastName;
  }
}
class MainClass
{
  public static void Main() 
  {
    Employee emp = new Employee(1, "X", "F");
    emp.WriteEmployee();
    FileStream serializeStream = new FileStream("c:\\test.dat", FileMode.Create);
    BinaryFormatter bf = new BinaryFormatter();
    bf.Serialize(serializeStream, emp);
    serializeStream.Flush();
    serializeStream.Close();
    FileStream retrieveStream = new FileStream("c:\\test.dat", FileMode.Open);
    Employee NewEmployee = (Employee) bf.Deserialize(retrieveStream);
    NewEmployee.WriteEmployee();
  }
}
Number: 1
FirstName: X
LastName: F
Number: 1
FirstName: X
LastName: F

Use BinaryFormatter to serialize user defined class

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class Product {
    public long Id;
    public string Name;
    public double Price;
    [NonSerialized]
    string Notes;
    public Product(long id, string name, double price, string notes) {
        Id = id;
        Name = name;
        Price = price;
        Notes = notes;
    }
    public override string ToString() {
        return string.Format("{0}: {1} (${2:F2}) {3}", Id, Name, Price, Notes);
    }
}
class Program {
    static void Main(string[] args) {
            List<Product> products = new List<Product>();
            products.Add(new Product(1, "A", 1000.0, "s"));
            products.Add(new Product(2, "B", 25.0, "T"));
            products.Add(new Product(4, "C", 12.0, "k"));
            foreach (Product product in products) {
                Console.WriteLine(product);
            }
            IFormatter serializer = new BinaryFormatter();
            FileStream saveFile = new FileStream("Products.bin", FileMode.Create, FileAccess.Write);
            serializer.Serialize(saveFile, products);
            saveFile.Close();
            FileStream loadFile =new FileStream("Products.bin", FileMode.Open, FileAccess.Read);
            List<Product> savedProducts = serializer.Deserialize(loadFile) as List<Product>;
            loadFile.Close();
            foreach (Product product in savedProducts) {
                Console.WriteLine(product);
            }
    }
}