我们有一个非常大的对象图(在正常程序执行期间通过 DataNucleus ORM 从数据库延迟加载,所以通常没有问题)但我们只想用 SnakeYaml 序列化其中的一小部分——只是类的一小部分。
这些类之一与其他类之间存在关系,最终“到达”对象图中的大多数其他对象,这导致将几乎所有对象从数据库拉入 YAML 序列化流 - 经典的“序列化整个世界” “当您拥有数百万个您可以想象的可到达对象时,这个问题不会很好地结束:)
我发现了 SnakeYaml 'Representer' 类,它看起来像一个钩子,可以让您指定“不”来序列化特定 bean,但当它遇到该 bean 时,它看起来不像对象图导航过程中的断路器。它不会为该 bean 编写 YAML 输出,但 SnakeYaml 似乎会继续导航对象图经过该 bean。
private class CircuitBreakerRepresenter extends Representer
{
@Override
protected NodeTuple representJavaBeanProperty(Object javaBean, Property property,
Object propertyValue, Tag customTag) {
// Intention: Don't navigate past the instances of 'Role' class when serializing
// Outcome: Appears to continue navigating past 'Role' class instances
if (javaBean instanceof Role) {
return null;
} else {
return super.representJavaBeanProperty(javaBean, property, propertyValue,
customTag);
}
}
}
有没有办法让 SnakeYaml 在序列化对象图时不导航到特定的 bean?