Список прототипов как JSON

Какой самый простой способ заставить прототип вести себя как стандартный сериализатор Джексона?

Я хотел иметь возможность сериализовать графы объектов, списки или массивы как корневые объекты, но кажется, что для этого даже нет обходного пути?

Вот - o объект, который может иметь тип String, SomeType, List[T] и т. д.

JsonIOUtil.writeTo(stream,
                   o,
                   RuntimeSchema.getSchema((Class<Object>) o.getClass()),
                   false,
                   LinkedBuffer.allocate());

1 ответ

JSON не является основным типом сериализации, поддерживаемым protostuff. Первоначально он был создан для поддержки protobuf с некоторыми расширениями (графами объектов). Сериализация JSON была добавлена ​​позже как "поддерживаемый" формат сериализации. Вот почему есть несколько ограничений, которых нет в общих библиотеках поддержки JSON, таких как Jackson JSON или GSON.

Прототип может сериализовать / десериализовать "сообщение", которое является абстракцией структуры с набором пар ключ-значение - полей. Поле может быть примитивным (целое число, строка и т. Д.), Другим сообщением или массивом. Но нет способа напрямую сериализовать массив - вам всегда нужно "сообщение".

Вы можете определить класс-оболочку следующим образом:

class Event {
    public Object data;
}

С помощью этого класса-обёртки вы можете установить "data" для любого произвольного типа, включая List/array.

ОБНОВЛЕНИЕ 2016-10-04:

Формат сериализации JSON в protostuff не поддерживает циклические ссылки. Для сериализации графов объектов вы должны использовать GraphIOUtil, который использует свой собственный двоичный формат.

Другие вопросы по тегам