0

I looked through another question asked here to get the code I tried.

So I have a dictionary 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 

Suppose the dictionary is filled with employees with names and an identification code

and so I tried this to 'save it' using a binary file :

        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();

however, it seems this technique only works for objects.

here is the error that I get:

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

my goal is to simply retrieve the saved dictionary by reading the binary file. (if that is even possible?)

Community
  • 1
  • 1
redwa11
  • 15
  • 2
  • 5
  • 1
    Have you considered that one of your arguments to `binayFormatter.Serialize` might be wrong? – yaakov May 07 '16 at 23:26

1 Answers1

2

Updated.

I think your first argument to your serializer is wrong. You're giving it a string of the path, and not the stream object. This works for me (BTW - removed relative path)

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}");
    }
}
Wesley Long
  • 1,708
  • 10
  • 20