使用org.simpleframework.xml序列化Hashtable

时间:2014-06-02 10:16:51

标签: java android simple-framework

我有这段代码:

@ElementList(name="package", required=false, inline=true)   
private Hashtable<String, PackageListItem> packages;

这给了我这个错误:

  

D / debug(22150):java.util.Hashtable无法强制转换为java.util.Collection

我尝试使用getter解决这个问题:

@ElementList(name="package", required=false, inline=true)
private Collection<PackageListItem> getPackageXML() {
    return packages.values();
}

但这给了我一个我不太明白的错误:

  

D / debug(22307):默认构造函数不能接受只读@ org.simpleframework.xml.ElementList(data = false,empty = true,entry =,inline = true,name = package,required = false,type在com.example.MyClass类

中的方法'packageXML'上= void)

我知道我可以使用ElementMap,但这会在我的XML中提供太多信息。

如何在Simple 2.7.1中序列化Hashtable的值?

2 个答案:

答案 0 :(得分:0)

或者,您可以使用HashMap而不是Hashtable。它们几乎相同,所以它很有可能适合你。以下是不同之处: Differences between HashMap and Hashtable?

以下是使用simpleXML的地图的示例: http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#map

<强>更新

好吧,Hashtable实现了Map接口,因此它应该与@ElementMap注释一起使用。 (你现在使用@ElementList。)

答案 1 :(得分:0)

尝试类似的东西:

private Hashtable<String, PackageListItem> packages;

@ElementList
private List<PackageListItem> list;

public PropertyMap() {
    this.packages = new Hashtable<String, PackageListItem>();
}

@Validate
public void validate() {
    List<String> keys = new ArrayList<String>();

    for(PackageListItem entry : list) {
        String key = entry.getKey();

        if(keys.contains(key)) {
            throw new PersistenceException("Duplicate key %s", key);
        }

        keys.put(key);
    }
}

@Commit
public void build() {
    for(PackageListItem entry : list) {
        packages.put(entry.getKey(), entry);
    }
}