【问题标题】:Gson/ Libgdx Json: Serialize class that extends ArrayListGson/ Libgdx Json:扩展 ArrayList 的序列化类
【发布时间】:2016-02-03 06:19:22
【问题描述】:

我正在尝试序列化继承自 ArrayList 的类 A。

class A<T> extends ArrayList<T>{
    // some stuff ...
}

这很好用。输出是列表元素的简单数组。但是,如果我向 A 类添加字段,它们不会被序列化:

class A<T> extends ArrayList<T>{
    String text = "text";
}

导致与上面的类相同的 json 输出 - 字符串不出现。我用 gson 和 libgdx json 序列化器尝试了这个,它们都以相同的方式工作。如何同时序列化类字段和列表的元素??

( 作为一种解决方法,我将列表存储为 A 中的一个字段:

class A<T>{
    ArrayList<T> list;
    String key;
}

但这并不是一个真正优雅的解决方案,因为我必须自己在 A 中实现所有列表方法(如 .add()、.get()、...)。 )

非常感谢您的帮助。

【问题讨论】:

    标签: java list serialization libgdx gson


    【解决方案1】:

    在解析时尝试这样做:

    Type type = new TypeToken<A<WhateverTypeOfArrayListYouWant>>(){}.getType();
    gson.fromJson(string, type);
    

    编辑: 也适用于您的序列化问题:

    @Override
    private void writeObject(java.io.ObjectOutputStream s)
        throws java.io.IOException{
        super.writeObject(s);
        s.writeInt(yourInt);
        s.writeLong(yourLong);
    }
    
    @Override
    private void readObject(java.io.ObjectInputStream s)
        throws java.io.IOException, ClassNotFoundException {
        super.readObject(s);
        yourInt= s.readInt();
        yourLong= s.readLong();
    
    }
    

    【讨论】:

    • 您好,感谢您的回复。但我已经知道类型 T。我的问题是 A 的字段没有序列化。被序列化的都是A的列表元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多