使用AnnotationStrategy时自动反序列化子节点

时间:2012-12-20 14:07:17

标签: java converter simple-framework

我正在使用SimpleXML库for Java。目前,我正在尝试使用@Convert注释反序列化节点。我重写了Converter接口中的read()方法,它有以下原型:

Converter.read(InputNode node)

在read()方法中,我迭代子节点并反序列化它们。但是,一些子节点非常复杂,我希望它们使用当前上下文来反序列化正常方式。我认为可以使用Traverser类来完成:

public void read(InputNode node) {
    InputNode child;
    while ((child = node.getNext()) != null) {
        String name = child.getName();
        if (name == "child1") {
            //manually read object - no problem
            MyFirstClass object = new MyFirstClass(child.getValue());
        } else if (name == "child2") {
            //automatically read object - here is the problem
            Traverser traverser = new Traverser(context);
            MySecondClass object = traverser.read(child, MySecondClass.class);
        }
    }
}

有两个问题:

  1. Traverser类是SimpleXML的内部类,默认情况下,它不在外面。

  2. 我无法访问read方法中的上下文对象。 InputNode没有提供访问它的方法。

  3. 有没有办法在没有SimpleXML的复杂修改的情况下在这个地方获取Context对象?更改Traverser类的可见性很容易,但提供上下文不是。

    或许,有没有更简单的方法来做我需要的事情?

1 个答案:

答案 0 :(得分:1)

您可以简单地使用您创建的Persister而不是使用AnnotationStrategy使用RegistryStrategy。