private void writeObject(final Type type, final Object object, final int index) throws SerialisationException {
if (null != object) {
final String fieldName = type.getName();
if (type.isPrimitive()) {
recordConsumer.startField(fieldName, index);
if (object instanceof Object[]) {
for (final Object innerObject : (Object[]) object) {
writePrimitive(innerObject);
}
} else {
writePrimitive(object);
}
recordConsumer.endField(fieldName, index);
} else {
final String originalType = type.getOriginalType().name();
if ("MAP".equals(originalType)) {
writeMap(fieldName, index, (Map<Object, Object>) object, type);
} else if ("LIST".equals(originalType)) {
writeList(fieldName, index, object, type);
} else {
throw new SerialisationException("Could not write object " + object.toString() + " with type " + type.toString());
}
}
}
}