我在2个不同的项目中有2个使用序列化的程序。
程序1对一个称为Quiz的类的数组进行序列化和反序列化。两个项目都具有Quiz Class。
程序2仅反序列化程序1序列化的内容:
private void loadSerialize(object sender, EventArgs e)
{
BinaryFormatter formatter = new BinaryFormatter();
Stream stream = new System.IO.FileStream("DataFile.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
Quiz[] obj = (Quiz[]) formatter.Deserialize(stream);
for(int i = 0; i< obj.Length; i++)
{
quizes.Add(obj[i]);
}
stream.Close();
}
private void saveSerialize(object sender, FormClosedEventArgs e) {
Quiz[] obj = quizes.ToArray();
BinaryFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("DataFile.bin", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
}
这两个程序都具有“ loadSerialize”功能,而只有Program1具有“ saveSerialize”功能。
尝试在Program2中反序列化文件时,出现序列化异常。
这样说(错误消息是葡萄牙语,所以我将其翻译为英语):
无法找到程序集“ infoAplicadaEnsino,版本= 1.0.0.0,文化=中性,PublicKeyToken =空”。
如何在Program2中反序列化?
最佳答案
相同的类成员,名称和名称空间不足以进行反序列化工作,程序集也必须匹配,这就是BinaryFormatter
的设计方式。您可以通过将Quiz
类提取到单独的类库项目中并通过两个程序项目引用新项目来解决此问题。
关于c# - 使用不同程序进行序列化C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33724765/