二进制格式化程序反序列化异常

时间:2019-02-08 10:12:42

标签: c# wpf serialization deserialization binaryformatter

我正在使用BinaryFormatter进行序列化和反序列化。 由于某些要求,我需要更改名称空间名称和类名称。

在两种情况下 -我更改名称空间名称或更改类名称都得到序列化异常。

有什么办法解决这个问题?

1 个答案:

答案 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可能只是串行化器的错误选择。存在许多替代的序列化器,它们可以做得更好—效率更高的 对重构更友好。请考虑更改串行器。