如何以二进制格式序列化C#对象

时间:2015-12-24 12:13:53

标签: c#

我在Java中有这个代码,它以二进制格式序列化一些对象。

void save(String name) {
   try {
       FileOutputStream fs = new FileOutputStream(name);
       ObjectOutputStream os = new ObjectOutputStream(fs);
       os.writeObject(this);
       os.close();
       }
   catch (Exception ex) {
   }
}

我需要在C#中这样做,我该怎么做?

1 个答案:

答案 0 :(得分:2)

要以二进制格式保存某些对象,可以使用 BinaryFormatter 类。但是这个类要求您要序列化的类必须使用 Serializable 属性进行修饰。

所以下面的类Person就是一个如何做到这一点的例子。

[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public void Save(string filePath)
    {
        var formatter = new BinaryFormatter();
        using (var stream = File.Open(filePath, FileMode.Create))
            formatter.Serialize(stream, this);
    }


    public static Person ReadFromFile(string filePath)
    {
        var formatter = new BinaryFormatter();
        using (var stream = File.OpenRead(filePath))
            return (Person)formatter.Deserialize(stream);
    }
}

你可以这样使用:

public class Program
{
    public static void Main(string[] args)
    {
        var p = new Person { Name = "Alberto Monteiro", Age = 25 };
        p.Save("person.bin");

        var person = Person.ReadFromFile("person.bin");
        Console.WriteLine(person.Name);
        Console.WriteLine(person.Age);
    }
}