【问题标题】:SimpleXML deserialization error in AndroidAndroid中的SimpleXML反序列化错误
【发布时间】:2011-04-04 09:53:35
【问题描述】:

我对反序列化 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: Attribute 'nil' does not have a match in class B at line -1

有什么解决办法吗? 谢谢。

【问题讨论】:

    标签: java android simple-framework


    【解决方案1】:

    你应该给你的 C 类添加一个属性:

    @Attribute(name = "i:nil")
    boolean myProperty;
    

    【讨论】:

    • 表示 C 对象为空。但是 SimpleXML 不明白这一点。此 XML 文档也有字段 ,D 是字符串。我注释了@Element(required=false)String D。它有效!
    • 首先,这甚至不是有效的 XML,“i”前缀的命名空间在哪里声明?上面的答案会起作用,但您也可以使用 Persister.read(A.class, sourceXml, false) 阅读。这将忽略 i:nill 并且不会抛出异常。
    • 我已经在最新版本中尝试过,但它不起作用。我尝试过使用前缀,没有前缀,使用命名空间定义。没有...没有什么是行不通的。
    【解决方案2】:

    通常会显示空内容

    xsi:nil="true"
    

    如果这就是你要在这里做的事情,请注明。

    【讨论】:

      猜你喜欢
      • 2012-11-01
      • 2013-11-11
      • 2013-04-02
      • 1970-01-01
      • 2011-02-27
      • 2014-02-19
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多