我想知道是否有一种方法可以创建序列化对象图的树/视图,以及是否有人有任何指针?编辑的目的是如果我们由于某种原因遇到反序列化问题,我们实际上可以查看/生成关于序列化数据的报告,以帮助我们在必须调试代码之前确定问题的原因。此外,我想在将来扩展它以获取两个流(版本 1、版本 2)并突出显示它们之间的差异,以帮助确保我们不会在代码更改期间意外删除有趣的信息。/编辑
传统上我们使用的是 Soap 或 XML 序列化,但是这些对于我们的需求来说变得过于受限,而二进制序列化通常可以满足我们的所有需求。之所以没有采用,是因为查看序列化内容以帮助修复升级问题等要困难得多。
所以我开始考虑尝试创建一个关于序列化信息的视图。我可以在一定程度上从 ISerializable 构造函数执行此操作:
public A(SerializationInfo info, StreamingContext context)
{}
给定序列化信息,我可以反映 m_data 成员并查看实际的序列化内容。这种方法的问题是
- 它只会显示树的一个分支,我想从根显示整个树,从这个位置实际上不可能做到。
- 这不是一个查询信息的方便地方,我想将流传递给一个班级并在那里完成工作。
我见过 ObjectManager 类,但这适用于现有的对象图,而我需要能够从数据流中工作。我已经查看了使用 ObjectReader 和 __BinaryParser 的 BinaryFormatted,它连接到 ObjectManager(我认为它将拥有全部内容,只是可能在一个平面列表中),但是要复制它或通过反射调用它(2这 3 个类是内部的)似乎需要做很多工作,所以我想知道是否有更好的方法。