我查看了另一个问题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
我的目标是通过读取二进制文件来检索已保存的字典。 (如果可能的话?)
答案 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}");
}
}