使用Gson使用比较器进行序列化设置

时间:2015-01-22 00:08:50

标签: java gson

我需要序列化一个包含TreeSet的类,它有一个自定义比较器(byte []不可比较)。

当我尝试用Gson(v2.3.1)反序列化类时,我得到:

Exception in thread "main" java.lang.ClassCastException: [B cannot be cast to java.lang.Comparable
    at java.util.TreeMap.compare(TreeMap.java:1290)
    at java.util.TreeMap.put(TreeMap.java:538)
    at java.util.TreeSet.add(TreeSet.java:255)....

因此,使用比较器不会反序列化TreeSet。

该课程如下:

public class In {

    private final SortedSet<byte[]> keys = new TreeSet<>(new ByteKeyComparator());

}

有没有办法让Gson明白它需要一套比较器呢?

1 个答案:

答案 0 :(得分:0)

你是对的,它是一个序列化错误。但是,它与Gson无关,实际上您的自定义比较器被保留。

问题在于TreeMap.put(K,V)的实现与空TreeSet的反序列化行为相结合,这导致支持映射具有空root。如果TreeMap的根节点为空并且您放置了一个键/值对,它将忽略配置的比较器。

要解决您的问题,请跳过序列化空TreeSet s。

相关问题