2015-01-21 2 views
2

Вот простой классконвертер не вызывается при использовании 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

Полезный вопрос, +1. – ollo

ответ

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) { 
    // ... 
} 
+1

Огромное вам спасибо за разъяснение. Я не могу поверить, что полностью пропустил часть стратегии, читая пример, на который вы указали.Поздняя ночь или раннее утро не могут быть хорошим оправданием. – Hong

Смежные вопросы