Список прототипов как 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, который использует свой собственный двоичный формат.