在不知道写入的确切类型的情况下反序列化二进制数据

本文关键字:情况下 反序列化 二进制 数据 类型 不知道 | 更新日期: 2023-09-27 18:19:31

我遇到了一个问题,使用BinaryFormatter存储的少量数据对象返回时缺少参数(null/default)。

我想知道丢失的项是否保存为null,或者序列化的对象是否从源代码管理中的版本更改,然后在代码提交之前恢复(例如int numDogsunsigned int dogCount)。

前者表示在序列化完成之前运行的数据验证代码中存在严重错误;而后者只是测试数据库中的垃圾数据,可以忽略。

由于BinaryFormatter能够在成员被更改、添加或删除时获得其他所有内容,我认为它以类似于键值存储的形式编写对象。有没有任何方法可以获得它的人类可读表示,而不必尝试和猜测序列化对象的确切细节?

在不知道写入的确切类型的情况下反序列化二进制数据

如果在对象上实现ISerializable,则可以通过尝试反序列化来查看已序列化的内容。

您将需要添加一个具有与ISerializable.GetObjectData相同签名的构造函数——这就是反序列化发生的地方。