@SuppressWarnings("unchecked") @Override protected void serializeInternal(T obj, JsonGenerator generator, SerializationContext ctx) { for (Map.Entry<?,?> entry : obj.entrySet()) { final String keysString = String.valueOf(entry.getKey()); final Object value = entry.getValue(); if (value == null) { generator.writeNull(keysString); continue; } generator.writeKey(keysString); serializeItem(value, generator, ctx); } }
@Override public <T> void serialize(String key, T object, JsonGenerator generator) { Objects.requireNonNull(key); Objects.requireNonNull(object); final ClassModel classModel = getMappingContext().getOrCreateClassModel(object.getClass()); generator.writeKey(key); serializeRoot(object, generator, classModel); }
@SuppressWarnings("unchecked") private void marshallProperty(T object, JsonGenerator generator, SerializationContext ctx, PropertyModel propertyModel) { Marshaller marshaller = (Marshaller) ctx; if (propertyModel.isReadable()) { final Object propertyValue = propertyModel.getValue(object); if (propertyValue == null || isEmptyOptional(propertyValue)) { if (propertyModel.getCustomization().isNillable()) { generator.writeNull(propertyModel.getWriteName()); } return; } generator.writeKey(propertyModel.getWriteName()); final JsonbSerializer<?> propertyCachedSerializer = propertyModel.getPropertySerializer(); if (propertyCachedSerializer != null) { serializerCaptor(propertyCachedSerializer, propertyValue, generator, ctx); return; } Optional<Type> runtimeTypeOptional = ReflectionUtils.resolveOptionalType(this, propertyModel.getPropertyType()); Type genericType = runtimeTypeOptional.orElse(null); final JsonbSerializer<?> serializer = new SerializerBuilder(marshaller.getJsonbContext()) .withWrapper(this) .withObjectClass(propertyValue.getClass()) .withCustomization(propertyModel.getCustomization()) .withType(genericType).build(); serializerCaptor(serializer, propertyValue, generator, ctx); } }