gpt4 book ai didi

c# - 序列化 - 从流中查看对象图

转载 作者:太空狗 更新时间:2023-10-29 21:59:11 26 4
gpt4 key购买 nike

我想知道是否有一种方法可以创建序列化对象图的树/ View ,是否有人有任何指示? 编辑 目的是如果我们由于某种原因遇到反序列化问题,我们实际上可以查看/生成关于序列化数据的报告,以帮助我们在必须调试之前确定问题的原因代码。此外,我想在将来扩展它以获取两个流(版本 1、版本 2)并突出显示它们之间的差异,以帮助确保我们不会在代码更改期间意外删除有趣的信息。 /编辑

传统上我们使用 Soap 或 XML 序列化,但这些对于我们的需求来说变得太受限制了,二进制序列化通常可以满足我们的所有需要​​。之所以没有采用,是因为很难查看序列化内容来帮助解决升级问题等。

所以我开始考虑尝试创建一个关于序列化信息的 View 。我可以在一定程度上从 ISerializable 构造函数执行此操作:

public A(SerializationInfo info, StreamingContext context)
{}

鉴于序列化信息,我可以反射(reflect) m_data 成员并查看实际的序列化内容。这种方法的问题是

  1. 它只会显示树的一个分支,我想从根部显示整棵树,但实际上不可能从这个位置开始。
  2. 查询信息的地方不方便,我想将流传递给类并在那里完成工作。

我见过 ObjectManager 类,但它适用于现有的对象图,而我需要能够处理数据流。我已经查看了使用 ObjectReader 和 __BinaryParser 的 BinaryFormatted,连接到 ObjectManager(我认为它将包含全部内容,可能只是在一个平面列表中),但要复制它或通过反射调用它(2这 3 个类中的一个是内部的)看起来工作量很大,所以我想知道是否有更好的方法。

最佳答案

你可以放一个List<Child class>在每个父类中(即使相同)

当你创建一个 child 时,你会立即将它放在该列表中,或者更好的是在将它添加到列表时声明它

例如

ListName.Add(new Child(Constructer args));

使用它,您可以将它们序列化为一个文件,其中包含对象的层次结构和对象本身。

如果父类和子类相同,则没有理由不能拥有动态和多层次的层次结构。

关于c# - 序列化 - 从流中查看对象图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8078852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com