【问题标题】:How to preserver the order of elements in a list when serializing with SimpleXML?使用 SimpleXML 序列化时如何保留列表中元素的顺序?
【发布时间】:2012-06-23 20:45:09
【问题描述】:

我想使用 SimpleXML 序列化一个列表,以便以后可以再次反序列化它。我需要保留元素的顺序,或者至少每次序列化时都达到相同的顺序,这样我就可以对其进行排序,比如,只需保留反序列化的列表。

顺序很重要,因为它是一个地理点列表,用于在地图上绘制路径,并且作为实际经过的路径。如果不保留顺序,路径将毫无意义。

我不需要使用 SimpleXML,但我已经在使用它来反序列化其他内容,并且除了保留顺序之外的所有内容都已经工作,所以我想避免学习使用另一个序列化程序执行此操作的开销。此外,SimpleXML 适用于 Android 2.3.3,这是必须的,因为它适用于 Android 应用程序。

我知道 Android 附带的解析器和序列化器,我实际上使用了解析器,但我还没有对序列化器做任何事情,所以如果有一种简单的实现方法,那将再次产生相当大的开销我需要 SimpleXML。

请注意,我说的是保留列表中元素的顺序,而不是有标签的类的元素,相比之下,这似乎是一个相当普遍的问题去我的。

问候

【问题讨论】:

  • 不是自动保存吗?

标签: java serialization android-2.3-gingerbread preserve simple-framework


【解决方案1】:

订单被保留(您只需要使用@ElementList 对其进行注释),如以下示例所示:

import java.util.Arrays;
import java.util.List;

import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
import org.simpleframework.xml.core.Persister;

public class SimpleXMLTest {

    public static void main(final String[] args) throws Exception {
        Persister persister = new Persister();

        ModelClass model = new ModelClass(Arrays.asList("Item1", "Item2", "Item3"));

        persister.write(model, System.out);
    }
}

@Root
class ModelClass {

    @ElementList
    private List<String> list;

    public ModelClass() {
    }

    public ModelClass(final List<String> list) {
        super();
        this.list = list;
    }

    public List<String> getList() {
        return list;
    }

}

输出将是:

<modelClass>
   <list class="java.util.Arrays$ArrayList">
      <string>Item1</string>
      <string>Item2</string>
      <string>Item3</string>
   </list>
</modelClass>

【讨论】:

    【解决方案2】:

    使用org.simpleframework.xml.Order注解,这里可以指定元素和属性的顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      相关资源
      最近更新 更多