将字典保存到二进制文件

Save a dictionary to a binary file

我查看了另一个问题 here 以获取我尝试过的代码。

所以我这里有一本字典:

private static Dictionary<int, string> employees = new Dictionary<int, string>();
//the int key is for the id code, the string is for the name 

假设字典中填满了具有姓名和识别码的员工

所以我尝试使用二进制文件 'save it' :

        FileStream binaryfile = new FileStream(@"..\..\data\employees.bin", FileMode.OpenOrCreate);

        var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        binaryFormatter.Serialize(@"..\..\data\employees.bin", employees);

        binaryfile.Close();

不过,似乎这种技术只适用于对象。

这是我得到的错误:

The best overloaded method match for 'System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(System.IO.Stream, object)' has some invalid arguments

我的目标是通过读取二进制文件来简单地检索保存的字典。 (如果可能的话?)

已更新。

我认为您对序列化程序的第一个参数是错误的。你给它一个路径字符串,而不是流对象。这对我有用(顺便说一句 - 删除了相对路径)

class Program
{
    private static Dictionary<int, string> employees = new Dictionary<int, string>();
    static void Main(string[] args)
    { 
        employees.Add(1, "Fred");
        var binaryFormatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

        var fi = new System.IO.FileInfo(@"employees.bin");

        using (var binaryFile = fi.Create())
        {
            binaryFormatter.Serialize(binaryFile, employees);
            binaryFile.Flush();
        }

        Dictionary<int, string> readBack;
        using (var binaryFile = fi.OpenRead())
        {
              readBack = (Dictionary < int, string> )binaryFormatter.Deserialize(binaryFile);
        }

        foreach (var kvp in readBack)
            Console.WriteLine($"{kvp.Key}\t{kvp.Value}");
    }
}