[英]C# - Binary Serialization InvalidCastException
所以我有一个名为 OutputInformation 的类,我想存储它,然后在另一台计算机上读取以检索数据。
我正在使用二进制序列化。
[Serializable()]
public class OutputInformation
{
public List<string> filenames { get; set; }
public long[] filesizes { get; set; }
}
public void Write()
{
OutputInformation V = new OutputInformation();
V.filesizes = sizearray;
V.filenames = namelist;
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("D:\\MyFile.bin", FileMode.Create,
FileAccess.Write, FileShare.None);
formatter.Serialize(stream, V);
stream.Close();
}
序列化是在用户控件中完成的,如果我在用户控件中反序列化,它工作正常。
但是如果我尝试从我的主窗口反序列化,我会得到一个 invalidcastexception。 所以我想如果我试图从另一台计算机反序列化文件,也会发生同样的问题。
我该如何解决这个问题? 我只需要将该类存储在一个文件中,然后再从另一台计算机上检索它。 最好不要使用 XML 序列化。
[Serializable()]
public class OutputInformation
{
public List<string> filenames { get; set; }
public long[] filesizes { get; set; }
}
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("D:\\MyFile.bin", FileMode.Open,
FileAccess.Read, FileShare.Read);
OutputInformation obj = (OutputInformation)formatter.Deserialize(stream);
stream.Close();
错误是一个 InvalidCastException。 附加信息:[A]OutputInformation 不能转换为 [B]OutputInformation。
两个类都应该在同一个命名空间中。 在与序列化完全相同的命名空间中定义您的OutputInformation
类的反序列化(或使用它引用程序集)。
或者,如果不可能,或者您不想这样做,您应该编写自己的SerializationBinder
实现
public class ClassOneToNumberOneBinder : SerializationBinder
{
public override Type BindToType(string assemblyName, string typeName)
{
typeName = typeName.Replace(
"oldNamespace.OutputInformation",
"newNamespace.OutputInformation");
return Type.GetType(typeName);
}
}
并在反序列化之前设置它:
formatter.Binder = new ClassOneToNumberOneBinder();
在此处查看更多详细信息: 是否可以在更改类名后恢复通过“BinaryFormatter”序列化的对象?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.