2016-05-07 4 views
0

Я просмотрел еще один заданный вопрос 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 

Предположим, словарь заполнен сотрудниками с именами и идентификационный код

и поэтому я попытался это «сохранить его» с помощью двоичного файла:

 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

Вы считаете, что один из ваших аргументов в 'binayFormatter.Serialize' может быть неправильным? – yaakov

ответ

1

Обновлено.

Я думаю, что ваш первый аргумент для вашего сериализатора неверен. Вы даете ему строку пути, а не объект потока. Это работает для меня (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}"); 
    } 
} 
+0

Это тоже работает для меня, спасибо! – redwa11

 Смежные вопросы

  • Нет связанных вопросов^_^