我正在使用BinaryFormatter
进行序列化和反序列化。
由于某些要求,我需要更改名称空间名称和类名称。
在两种情况下 -我更改名称空间名称或更改类名称都得到序列化异常。
有什么办法解决这个问题?
答案 0 :(得分:0)
您可以通过编写自己的SerializationBinder
来做到这一点,即
class MyCustomBinder : SerializationBinder
{
public override void BindToName(Type serializedType, out string assemblyName, out string typeName)
{
// TODO: turn a Type into a pair of strings
}
public override Type BindToType(string assemblyName, string typeName)
{
// TODO: turn a pair of strings into a Type
}
}
然后您将在.Binder
实例上指定BinaryFormatter
,它应该起作用。当然,您必须弄清楚旧的assemblyName
/ typeName
是什么,等等,并确保它在两个方向上都一样。
但是...,我对此的强调不够:如果遇到这个问题,BinaryFormatter
可能只是串行化器的错误选择。存在许多替代的序列化器,它们可以做得更好—效率更高的 对重构更友好。请考虑更改串行器。