Может ли быть нестандартный сериализатор Джексона для стандартного класса?(например, список) - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь создать собственный сериализатор для переменной экземпляра класса A.

Проблема в том, что переменная имеет "стандартный" встроенный тип (List<List<String>>)

Я обнаружил, что теоретически вы можете создать собственный сериализатор для типа, который будет использоваться ТОЛЬКО в вашем классе, используя дополнения ;так что теоретически, если бы я мог создать собственный сериализатор для List<List<String>>, я мог бы таким образом встроить его в класс А.

Но как мне создать собственный сериализатор для List<List<String>>?

1 Ответ

0 голосов
/ 31 мая 2018

Я думаю, что это может быть что-то вроде этого.Я не знаю, какую логику вы хотите использовать при сериализации, поэтому я написал простой массив 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"]]}

Это то, что вы пытаетесь сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...