Ошибка десериализации SimpleXML в Android

У меня проблема с десериализацией java-объекта. Для десериализации я использую SimpleXML.

@Root
public class A {
    @ElementList
    private ArrayList<B> b;

    getters, setters...
}  


public class B{
    @Element(name="C", required=false)
    private C c;

    getters, setters...
}  

public class C{
    private int id;
    private String name;

    getters, setters...
}  

Я получаю XML, который имеет следующее поле:

<A>
   <B>
       <C i:nil="true" />
   </B>
</A>

Dalvink выдает следующее исключение: org.simpleframework.xml.core.AttributeException: атрибут 'nil' не имеет совпадения в классе B в строке -1.

Есть идеи решения? Спасибо.


person Dmytro Boichenko    schedule 04.04.2011    source источник


Ответы (2)


вы должны добавить в свой класс C свойство:

@Attribute(name = "i:nil")
boolean myProperty;
person Vladimir Ivanov    schedule 04.04.2011
comment
‹C i:nil=true /› означает, что C-объект имеет значение null. Но SimpleXML этого не понимает. Также в этом XML-документе есть поле ‹D i:nil=true /›, D — String. Я аннотировал @Element(required=false)String D. Это работает! - person Dmytro Boichenko; 04.04.2011
comment
Во-первых, это даже не допустимый XML, где объявлено пространство имен для префикса «i»? Приведенный выше ответ будет работать, но вы также можете прочитать с помощью Persister.read(A.class, sourceXml, false). Это проигнорирует i:nill, и исключение не будет выдано. - person ng.; 25.05.2011
comment
Я пробовал это в последней версии, и это не работает. Я пробовал с префиксом, без префикса, с определениями пространств имен. Ничего... Ничего не получится. - person dodsky; 23.07.2012

Обычно нулевой контент представлен с

xsi:nil="true"

атрибут, если это то, что вы пытаетесь сделать здесь.

person harism    schedule 04.04.2011