将字典保存为二进制文件

时间:2016-05-07 23:22:03

标签: c# dictionary binaryfiles binaryformatter

我查看了另一个问题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 

假设字典中填充了名称和识别码

的员工

所以我试着这样做以保存它&#39;使用二进制文件:

        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

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

1 个答案:

答案 0 :(得分:2)

更新

我认为你的序列化器的第一个参数是错误的。你给它一个路径的字符串,而不是流对象。这适用于我(BTW - 删除相对路径)

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}");
    }
}