使用Simple Framework时不调用Converter

时间:2015-01-21 06:26:46

标签: java simple-framework

这是一个简单的类

@Root(strict = false)
public class Foo{
    @ElementList(entry = "Test", required = false, inline=true)
    @Convert(TestConverter.class)
    public List<MyClass> test = new ArrayList<MyClass>();

    public static class TestConverter implements  Converter<List<MyClass>>
    {
        public List<MyClass> read(InputNode node) {

            return new ArrayList<MyClass>();
        }

        public void write(OutputNode node, List<MyClass> myclass) {
            node.setAttribute("debug", "debug");
        }
    }
}

永远不会调用转换器。任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:3)

  

永远不会调用转换器。任何人都可以对此有所了解吗?

原因在于:序列化程序不知道 @Convert 。您必须指定 策略 ,告诉他们要使用转换器。

使用以下其中一项:

使用AnnotationStrategy

只需替换......

Serializer ser = new Persister();

Serializer ser = new Persister(new AnnotationStrategy());
//                             |----------------------|

当然,每个here都有一个例子。


其他一些问题:

@ElementList(entry = "Test", required = false, inline=true)
@Convert(TestConverter.class)

这可能会失败:

  

请注意,对于上述字段, 元素注释是必需的 。如果   这与任何其他XML注释一起使用,例如 ElementList 或   文本 注释然后将抛出异常

http://simple.sourceforge.net/download/stream/doc/javadoc/org/simpleframework/xml/convert/Convert.html

只需使用@Element代替

使用@Override

@Override /* Better use this */
public List<MyClass> read(InputNode node) {
    // ...
}

@Override /* Better use this */
public void write(OutputNode node, List<MyClass> myclass) {
    // ...
}