【发布时间】:2012-07-26 05:29:33
【问题描述】:
当我通过对象本身(面向对象的方式)恢复所有每个节点和边来反序列化对象图时,我发现存在严重的依赖问题。
例如,如果一个对象A 引用自己A,(自循环引用)这意味着,它希望自己A 在恢复时处于完整的原始状态。因为它在被序列化的时候就是那个状态。
对于自引用的情况,它可以被检测到,因为它知道自己正在被恢复。但是如果A 需要另一个对象B,它也应该期望另一个对象B 也处于完整的原始状态。如果对象B 也引用了A,那么现在又是对A 的循环引用,在不知道A 现在正在恢复的情况下,这将成为同样的问题。 如果B在反序列化时想使用A的某些属性,不保证存在。
从根本上说,这个问题的发生是因为一个对象需要其他对象的完整状态,尽管它本身处于不完整状态。这没有意义。我曾考虑将恢复过程分为多个阶段,但这并没有真正的区别,因为实际上对象将保持在不完整状态,直到所有阶段完成。
我可以为这个问题提供一些建议或好的解决方案吗?
PS。
我开始编写代码来替代 Cocoa 的 NSKeyedArchiver。所以我假设对象的编码是由对象本身完成的。 (对于它的内部状态)所以它可能与一般图形问题不同。但是我不能排除对象本身可以获得的隐藏状态...
【问题讨论】:
标签: serialization graph deserialization