java - 如何使用简单 Xml 框架反序列化表示根级数组的 xml

标签 java xml deserialization simple-framework

我正在使用Simple XML framework用于 Android 上的反序列化。

我需要反序列化的xml大致如下:

<?xml version="1.0" encoding="UTF-8"?>
<elements type="array">
    <element foo="x"/>
    <element foo="y"/>
</elements>

换句话来说,它是一个位于根级别的数组。

如何定义一个可以反序列化的模型类?

我尝试了如下操作:

@Root (name = "elements")
public class Elements implements Serializable {
   private static final long serialVersionUID = ...

   @ElementArray (name = "element")
   private List<Element> elements;
}

但是它失败了,因为没有 type 字段来解释 xml 中的 type 属性。

添加 type 字段(只是为了满足反序列化器的要求)并不能解决问题,而是会生成另一个错误:org.simpleframework.xml.core.InstantiationException: Type不是字段“elements”的数组接口(interface) java.util.List ...

实现 Elements 类的正确方法是什么?尽管在时间压力下,我想要一个干净的解决方案,而不是一些黑客的解决方法(我可能会想出)。

最佳答案

在 Elements 类中,您应该使用 @ElementList 并添加名为“type”的属性

@ElementList(name="elements", inline=true)
private List<Element> elements;

@Attribute(name="type")
private String type;

另外,如果您不想关心 xml 中的 type 属性,只需添加 required=false,如下所示:

@Attribute(name="type", required=false)

关于java - 如何使用简单 Xml 框架反序列化表示根级数组的 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25388164/

相关文章:

java - Eclipse 中的数学(Android)

java - 使用 Java 检查 Selenium WebDriver 中元素的位置

java - 在 Gson 中,如何在反序列化期间检测类型不匹配?

c++ - strlen() 给出错误的大小,导致数组中出现空字节

java - mongodb 连接池

java - 上一个任务完成后定期运行 AsyncTask

Android简单XML解析

java - JAXB - Beans 到 XSD 还是 XSD 到 beans?

javascript - Edge中XML解析后如何保持属性的顺序?

c# - 在 C# 中使用嵌套数组反序列化 JSON