java - SimpleXml 框架 - 嵌入式集合

标签 java collections xml-serialization simple-framework

我尝试使用简单序列化嵌入式集合。 例如:

Map<String, List<MyClass>>

我已经在 MyClass 中添加了必要的注释,我尝试使用 @ElementMap 但它不起作用: 线程“main”中的异常 org.simpleframework.xml.transform.TransformException:不支持类 java.util.ArrayList 的转换

如果只是

@ElementMap Map<String, MyClass>

它工作正常。我不知道如何处理嵌入式集合。我知道 @ElementList 注释,但不知道在这种情况下如何使用它。有什么提示吗?

最佳答案

我遇到了同样的问题。我设法让它工作的唯一方法是一个非常俗气的 hack - 在另一个类中包装 List。

public class MyWrapper {

    @ElementList(name="data")
    private List<MyClass> data = new ArrayList<MyClass>();

    public MyWrapper(List<MyClass> data) {
        this.data = data;
    }

    public List<MyClass> getData() {
        return this.data;
    }

    public void setData(List<MyClass> data) {
        this.data = data;
    }

}

然后,而不是

@ElementMap Map<String,List<MyClass>>

...你会:

@ElementMap Map<String,MyWrapper>

在我的例子中, map 对我的类(class)来说是完全私有(private)的(即其他类(class)永远无法直接与 map 对话),所以我在这里有这个额外的层这一事实并没有太大的区别。当然,生成的 XML 很糟糕,但同样,就我而言,它是可以忍受的,因为我的类之外没有任何东西在使用它。希望我有比这更好的解决方案,但此刻,我被难住了。

关于java - SimpleXml 框架 - 嵌入式集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5027706/

相关文章:

java - "Unfortunately app has stopped"错误?

Java:如果集合元素在特定超时时间内不活动,则删除它们

java - XStream - 在向界面添加函数后使用以前的序列化对象?

java - 将 Java 应用程序部署到 Docker 镜像

java - IntelliJ IDEA 12 与 Play 2.0。没有 Java/Scaladocs

java - 访问日期而不创建引用变量

c# - 如何使用 protobuf-net 进行 xml 序列化?

java - 遍历 EnumMap#entrySet

c# - Silverlight 4 - 通过 XAML 声明/填充控件的集合属性?

c# - 序列化时出现 InvalidOperationException