#java #protostuff
Вопрос:
Я пытаюсь использовать библиотеку protostuff для сериализации/десериализации в своем проекте. Я последовал за README.md как упоминалось в github.
Я столкнулся с одной проблемой, когда поля ZonedDateTime неправильно сериализованы/десериализованы.
Рассмотрим этот простой пример
public class SomeClass {
private ZonedDateTime dateTime;
private String message;
public SomeClass(ZonedDateTime dateTime, String message) {
this.dateTime = dateTime;
this.message = message;
}
public static void main(String[] args) {
SomeClass serialized = new SomeClass(ZonedDateTime.now(), "some message");
byte[] bytes = getProtoByteArray(serialized, SomeClass.class);
SomeClass deSerialized = getObjectFromProtoByteArray(bytes, SomeClass.class);
System.out.println(serialized.getDateTime()); // 2021-06-14T23:07:07.100 05:30[Asia/Calcutta]
System.out.println(deSerialized.getDateTime()); // 2021-06-14T23:07:07.100null[Asia/Calcutta]
}
//serialization
public static <T> byte[] getProtoByteArray(T message, Class<T> clazz) {
LinkedBuffer buffer = LinkedBuffer.allocate(512);
Schema<T> schema = RuntimeSchema.getSchema(clazz);
// ser
final byte[] protostuff;
try {
protostuff = ProtobufIOUtil.toByteArray(message, schema, buffer);
} finally {
buffer.clear();
}
return protostuff;
}
//deserialization
public static <T> T getObjectFromProtoByteArray(byte[] data, Class<T> clazz) {
Schema<T> schema = RuntimeSchema.getSchema(clazz);
T parsed = schema.newMessage();
ProtobufIOUtil.mergeFrom(data, parsed, schema);
return parsed;
}
//getters setters
}
Как вы можете видеть на выходных данных, десериализованный объект имеет поле смещения, равное нулю
2021-06-14T23:07:07.100null[Asia/Calcutta]
Нужно ли нам что-то настраивать, чтобы устранить эту проблему ? Или в настоящее время библиотека не поддерживает тип ZonedDateTime ?