可以为标准类定制一个Jackson序列化程序吗? (例如List <list <string>&gt;)

时间:2018-05-31 14:01:57

标签: java jackson

我正在尝试为A类的实例变量创建自定义序列化程序。

问题在于变量属于标准&#34;内置类型(List<List<String>>

我发现理论上您可以为类型used ONLY within your class using mix-ins创建自定义序列化程序;所以理论上如果我可以为List<List<String>>创建自定义序列化器,我可以将它混合到A类中。

但是如何为List<List<String>>创建自定义序列化程序?

1 个答案:

答案 0 :(得分:2)

我认为它可能是这样的。我不知道你想要使用的逻辑,序列化时,所以我写了简单的json数组[] []

private static class ListListSerializer extends StdSerializer<List<List<String>>>{
    protected ListListSerializer(Class<List<List<String>>> t) {
        super(t);
    }
    protected ListListSerializer(){
        this(null);
    }


    @Override
    public void serialize(List<List<String>> lists, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeStartArray();
        for (List<String> strings : lists) {
            jsonGenerator.writeStartArray();
            for (String string : strings) {
                jsonGenerator.writeString(string);
            }
            jsonGenerator.writeEndArray();
        }
        jsonGenerator.writeEndArray();
    }
}

例如没有mixIn

private static class YourObject {

     private List<List<String>> myStrings = new ArrayList<>();

    public YourObject() {
        List<String> a = Arrays.asList("a","b","c");
        List<String> b = Arrays.asList("d","f","g");
        myStrings.add(a);
        myStrings.add(b);
}

    @JsonSerialize(using = ListListSerializer.class)
    public Object getMyStrings(){
       return myStrings;
    }
}


public static void main(String[] args) throws IOException {
    ObjectMapper mapper = new ObjectMapper();
    System.out.println(mapper.writeValueAsString(new YourObject()));
}

输出

{"myStrings":[["a","b","c"],["d","f","g"]]}

这是你想要做的吗?